Javascript 如何使用PhantomJS(1.9.8)将单击事件发送到div或按钮?
我不明白如何使用PhanthomJS关闭模态或元素 例如,我尝试使用下面的代码或使用CaperJSJavascript 如何使用PhantomJS(1.9.8)将单击事件发送到div或按钮?,javascript,phantomjs,Javascript,Phantomjs,我不明白如何使用PhanthomJS关闭模态或元素 例如,我尝试使用下面的代码或使用CaperJSclick和clickLabel和许多其他方法来完成它,但它不起作用 var webpage = require('webpage').create(); var url = 'http://sourceforge.net/'; webpage.viewportSize = { width: 1280, height: 800 }; webpage.render("test1.png"); we
click
和clickLabel
和许多其他方法来完成它,但它不起作用
var webpage = require('webpage').create();
var url = 'http://sourceforge.net/';
webpage.viewportSize = { width: 1280, height: 800 };
webpage.render("test1.png");
webpage.onLoadFinished = function(status) {
var coords = webpage.evaluate(function() {
var firstLink = document.querySelector('a.btn');
return {
x: firstLink.offsetLeft,
y: firstLink.offsetTop
};
});
console.log(coords.x);
console.log(coords.y);
webpage.sendEvent('mousedown', coords.x, coords.y ,'left');
};
webpage.open(url,function(){
webpage.render("test2.png");
phantom.exit()
});
这是我想跳过的元素。
和偏移量top
仅给出基于父元素的偏移量。您必须将所有元素偏移相加到根节点。至少CasperJS是这么做的
如果此通知是静态的,则可以确定一次坐标,然后每次都使用它们。根据屏幕截图(444330)可以很好地替代coords.x、coords.y
您也可以简单地使用synthentic鼠标单击,如前所述,这就是CasperJS所做的,但要结合特定的位置。这是一个简单的合成点击:
function click(el){
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(
"click",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, 0, 0, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
el.dispatchEvent(ev);
}
此外,您还有两个回调(
onLoadFinished
和webpage.open
)用于加载页面。您应该只有一个,这样在调用其中一个时就不会遇到问题。单击后,最好使用setTimeout
稍等片刻,让页面更改后再截图。我没有这样的通知,因此无法测试。我尝试过使用您的方法,但没有效果。我不确定我用对了。我用我的(444330)替换了坐标0,0,0,0,我用chrome开发工具尝试了其他坐标。你能给我一个在著名网站上关闭普通弹出窗口的例子吗?不,initMouseEvent的坐标应该保持在0。我的意思是,您应该为444330
替换coords.x,coords.y
。您的脚本很奇怪,因为您正在使用两个onLoadFinished回调。我要在答案中加上这个。