4

ここ数時間、私は DOM 要素をクエリし、それらを CasperJS を使用して配列に格納しようとしてきました。その後、それらをループしてクリック イベントを発生させることができます。

たとえば、私のマークアップは次のようになります。

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

ここで、それぞれを配列に格納し<li>、ループして Click イベントを発生させ、キャプチャを取得します。

これは私が試したことの1つです:

var listItems = [];

casper.start();

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

    this.echo(listItems);
});

これは[ , , , ]、基本的にそれらがすべてであることを意味しますnull

誰かが私を正しい方向に向けることができますか?

ありがとうございました!

4

2 に答える 2

10

これを試して:

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()基本的に、からシリアル化できない値を返すことはできません。ドキュメントで詳しく説明されています。

于 2013-04-30T20:32:30.463 に答える
1

CasperJS については何も知りませんが、JavaScript では配列はオブジェクトと見なされるため、配列の型は Object になります。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];
    }
}

編集:これは、アイテムを含む有効な配列が実際にあることを確認するためのものです。

于 2013-04-30T13:29:04.103 に答える