无法使用来自node-horseman的jQuery触发onclick事件

时间:2016-01-04 17:47:18

标签: jquery node.js phantomjs

我试图遍历一组元素,然后点击每个不包含表格的元素,但我似乎无法让它工作。我使用node-horseman

var SELECTOR = "li:not(:has(table)) h2";
horseman
    .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0")
    .open(url)
    .evaluate(function (selector) {
        var els = $(selector);
        $.each(els, function (el) {
            var event = document.createEvent("MouseEvent");
            event.initMouseEvent("click",
                true, true,
                window, null,
                0, 0, 0, 0,
                false, false, false, false,
                0, null);
            el.dispatchEvent(event);
        });
    }, SELECTOR)
    .delay(2000)
    //then do other scraping stuff

HTML结构(无法发布实际的HTML)

<li>
<h2>
    <span class="someclass">TEXT</span>
</h2>
</li>

从上面的HTML中,一些元素可能在h2元素下包含一个表元素。 当我执行此操作时,它不会点击任何内容。

1 个答案:

答案 0 :(得分:0)

在迭代jQuery.each()时,

arrays将项目的索引作为第一个参数传递,将项目的值作为第二个参数传递。您需要在元素上调用dispatchEvent而不是Number

要么像这样:

var els = $(selector);
$.each(els, function (idx, el) {
    ...
    el.dispatchEvent(event);

this

var els = $(selector);
els.each(function () {
    ...
    this.dispatchEvent(event);