如何从Phantom JS调用页面的JS函数?

时间:2014-08-15 03:33:55

标签: javascript jquery html angularjs phantomjs

我试图从Phantom JS调用JS函数。实际上,在单击已加载页面的select元素中的值时会触发该函数。这是我能得到的最接近的答案:Call function PhantomJs

这里,检索内部HTML。但是,我只需要调用此函数并在调用此函数后呈现加载的页面。

JS函数为setFilter('2 Days'),页面中的代码为<a class="ng-binding" ng-click="setFilter(span)">2 days</a>

我的代码:

window.setTimeout(function () {
            page.evaluate(function () {
                setRelativeFilter('Last 2d');
            });
            page.render(output);
            phantom.exit();
        }, waitTime);

错误:ReferenceError:无法找到变量:setFilter

1 个答案:

答案 0 :(得分:1)

如果函数未在全局范围内定义,那么可能无法获取对它的引用来调用它。您可以尝试单击相关链接。

在这里,我使用document.evaluate运行XPath表达式,根据里面的文本查找链接。

page.evaluate(function(){
    var xpathResult = document.evaluate(
        "//a[text()='2 days']", 
        document, 
        null, 
        XPathResult.FIRST_ORDERED_NODE_TYPE, 
        null
    );
    if (xpathResult && xpathResult.singleNodeValue) {
        var e = document.createEvent('MouseEvents');
        e.initMouseEvent('click', true, true, window, 
                         0, 0, 0, 0, 0, false, false, 
                         false, false, 0, null);
        xpathResult.singleNodeValue.dispatchEvent(e);
    }
});

我在此处点击了点击:PhantomJS; click an element