Javascript 如何使用PhantomJS(1.9.8)将单击事件发送到div或按钮?

Javascript 如何使用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

我不明白如何使用PhanthomJS关闭模态或元素

例如,我尝试使用下面的代码或使用CaperJS
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回调。我要在答案中加上这个。