为什么我的函数不会触发phantomjs中的click事件,但它在chrome浏览器中是什么?特别是在li元素上。
if(page.injectJs("./jquery-2.1.4.min.js") == false){
console.log("jquery Failed")
}
var sizePicked = page.evaluate(function(){
var Elements = document.getElementsByTagName("li");
for(i = 0; i < Elements.length; i++){
if (Elements[i].innerHTML.toLowerCase().indexOf("10") !== -1) {
$(Elements[i]).trigger("click");
break;
}
}
})
这是我正在使用的网站on。
答案 0 :(得分:2)
在早期的PhantomJS版本(2.0.0之前)中,底层渲染引擎不支持HTMLElement元素上的click()函数,但在HTMLInputElement元素(输入和按钮)上支持它。这就是为什么你可以点击()输入按钮而不是&lt; li&gt; s。
您的案例有两种可能的解决方案:
A)切换到PhantomJS 2
B)使用垫片模拟HTMLElements上的click()函数。只需在脚本顶部发出此evaluate
,它就可以在以后的evaluates
中使用。
page.evaluate(function(){
if (!HTMLElement.prototype.click) {
HTMLElement.prototype.click = function() {
var ev = document.createEvent('MouseEvent');
ev.initMouseEvent(
'click',
/*bubble*/true, /*cancelable*/true,
window, null,
0, 0, 0, 0, /*coordinates*/
false, false, false, false, /*modifier keys*/
0/*button=left*/, null
);
this.dispatchEvent(ev);
};
}
});
来自this solution的代码