我试图从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
答案 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