单击带有Node + PhantomJS的按钮

时间:2015-10-02 00:14:09

标签: javascript jquery node.js phantomjs

我正在使用Node + PhantomJS-Node进行一些动态网站抓取。打开第一页,获取链接,然后打开第二页。在第二页上有一个按钮,用于启动我无法点击的搜索。

最初我尝试在按钮元素上使用jQuery.click(),但是当截图时,它似乎没有被点击,因为页面上的图像没有更新。我按照solution here跟随我在下面实现的内容,但从下面的代码输出的屏幕截图表明没有点击按钮。

phantom.create(function (ph) {
    ph.createPage(function (page) {
        page.open("www.mysamplepage.com", function (status) {
            page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {

                page.evaluate(function () {
                    return $('div.Div5 a').attr('href');
                }, function (link) {
                    page.open(link, function(status) {
                        page.evaluate(function() {

                            var element = document.getElementById('mybutton');
                            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
                            );
                            element.dispatchEvent(ev);

                        }, function() {
                            setTimeout(function() {
                                console.log('status = ' + status);
                                page.render('page.png');
                                ph.exit();
                            }, 30000);
                        });


                    });
                });
            });
        });
    });
});

我不确定它是否相关但是当我执行以编程方式点击Chrome浏览器中的按钮的代码时,它只会被触发一次,并且不会触发后续的代码执行。

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
);

document.getElementById('btnAddressSearch').dispatchEvent(ev); // Executed
document.getElementById('btnAddressSearch').dispatchEvent(ev); // Not executed
document.getElementById('btnAddressSearch').dispatchEvent(ev); // Not executed

0 个答案:

没有答案