使用CasperJS将多个DOM元素存储在数组中

ped*_*rte 4 javascript evaluate casperjs

在过去的几个小时里,我一直在尝试查询DOM元素并将它们存储在CasperJS的数组中,然后我可以循环遍历它们并触发click事件.

比方说,我的标记是这样的:

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

现在,我想存储<li>一个数组,然后循环,触发Click事件,然后进行捕获.

这是我尝试过的事情之一:

var listItems = [];

casper.start();

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

    this.echo(listItems);
});
Run Code Online (Sandbox Code Playgroud)

它返回[ , , , ]基本上意味着它们都是null.

有人可以指导我朝正确的方向发展吗?

谢谢!

NiK*_*iKo 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);
});     
Run Code Online (Sandbox Code Playgroud)

基本上,您不能返回不可序列化的值this.evaluate(),它在文档中得到了很好的解释.