CasperJS评估函数不返回Array

时间:2016-12-22 19:29:26

标签: javascript casperjs

注意,我已经看过了:

Understanding the evaluate function in CasperJS

我正在尝试编写一个简单的网络抓取工具,以便在我教授的网页上下载所有pdf。

这是我的代码:

var casper = require('casper').create({verbose: true , logLevel: "debug" });
var url = "https://www.cs.rit.edu/~ib/Classes/CSCI264_Fall16-17/assignments.html";
casper.start(url);

var elements; 
try {
    casper.then(function(){
        try {
        // statements
        elements = this.evaluate(function(){ return __utils__.findAll('body ul li a'); });
        console.log("elements: " + elements);
        console.log(this.getCurrentUrl());

        } catch(e) {
            // statements
            console.log(e);
        }   
    });
} catch(e) {

    console.log(e);
}
casper.run();

返回的elements数组大小始终为零,但是当我放入

__utils__.echo(__utils__.findAll('body ul li a').length);

我获得了正确数量的链接。

这是因为evaluate函数不会返回一个元素数组吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用原生js方法代替casperjs提供的__utils__,例如:

elements = this.evaluate(function(){ return document.querySelectorAll('body ul li a'); });

我不确定为什么findAll无效。