PhantomJS无法单击现有元素

use*_*210 5 javascript jquery click dispatchevent phantomjs

我在Windows 8.1上使用PhantomJS 1.9.7,输入用户名和密码后我会点击Login按钮.我可以写用户名和密码但是,当我想让PhantomJS点击按钮时,它可以找到该元素,但无法点击它.我在之前的帖子中发现我需要创建事件并使用"dispatchEvent".我做到了但是我得到了如下错误:

TypeError:'undefined'不是函数(评估'elm.dispatchEvent(event)')

我也试图从EventListener获得帮助,但我得到了相同的错误.

如何点击元素?

var page = require('webpage').create();

page.open('URL', function() {
    var submitButton = enterUserAndPassAndLogin();      
    click(submitButton);
    phantom.exit();
});

function enterUserAndPassAndLogin() {
    var element = page.evaluate(function()  {
        document.querySelector('input[name="username"]').value = "*******";
        document.querySelector('input[name="password"]').value = "*******";
        return document.getElementsByTagName("Button");
    });
    return element;
}

function click(elm) {
    var event = document.createEvent("MouseEvent");
    event.initMouseEvent("click", true, true, window,
        0, 0, 0, 0, 0, false, false, false, false, 0, null);
    elm.dispatchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

Ses*_*tin -1

只需插入 Jquery 即可

$(selector).trigger('click');
Run Code Online (Sandbox Code Playgroud)

请注意,如果页面使用异步发布,则不会触发页面加载事件,但它“正在加载”,您必须等待响应。

也许设置等待几秒钟,这足以让异步帖子返回。