Храните несколько элементов DOM в массиве с помощью CasperJS

Последние пару часов я пытался запрашивать элементы DOM и сохранять их в массиве с помощью CasperJS, поэтому после этого я могу перебирать их и запускать событие click.

Скажем, моя разметка выглядит так:

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

Теперь я хочу сохранить каждый <li> в массиве, затем выполнить цикл, запустить событие Click, а затем выполнить захват.

Это одна из вещей, которые я пробовал:

var listItems = [];

casper.start();

casper.open(urlHere, function () {
    listItems.push(this.evaluate(function () {
        return document.querySelectorAll('ul > li');
    }));

    this.echo(listItems);
});

Он возвращает [ , , , ], что в основном означает, что все они null.

Может ли кто-нибудь направить меня в правильном направлении?

Благодарю вас!


person peduarte    schedule 30.04.2013    source источник


Ответы (2)


Попробуй это:

var listItems = [];

casper.start(urlHere, function () {
    listItems = this.evaluate(function () {
        var nodes = document.querySelectorAll('ul > li');
        return [].map.call(nodes, function(node) {
            return node.textContent;
        });
    });

    this.echo(listItems);
});     

По сути, вы не можете возвращать значения, которые не сериализуются из this.evaluate(), это скорее хорошо объяснено в документах.

person NiKo    schedule 30.04.2013
comment
как мне углубиться, например, захватить контент внутри LI - person CodeGuru; 12.01.2016

Я ничего не знаю о CasperJS, но массив считается объектом в JavaScript, поэтому массив будет иметь тип объекта. Вы пытались пройти через него, используя цикл for?

var i;
for(i=0;i<listItems.length;i++) {
    var item = listItems[i];
}

В качестве альтернативы, если у вас есть фактический объект, содержащий объекты вашего списка, вы можете сделать следующее:

for(i in listItems) {
    if(listItems.hasOwnProperty(i)) { 
        var item = listItems[i];
    }
}

Изменить: это просто для проверки того, что у вас действительно есть действительный массив, содержащий ваши элементы.

person Jon    schedule 30.04.2013
comment
Эй, Джон, я уже попробовал оба варианта, но все, что он возвращает, это null. Это уже становится скучно... Спасибо в любом случае - person peduarte; 30.04.2013