在函数中添加this.echo命令会导致在设置链接之前调用casper.run方法
var casper = require('casper').create();
function getLinks() {
this.echo("Getting links"); // <--------- This line cause everything to fail
var links = document.querySelectorAll('table');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('id');
});
}
var links = [];
casper.start('example.html', function() {
links = this.evaluate(getLinks);
});
casper.run(function() {
this.echo(links.length + ' links found:');
this.echo(' - ' + links.join('\n - ')).exit();
});
答案 0 :(得分:2)
从未使用过casper.js,而是使用documentation:
提醒一下,将
evaluate()
方法视为CasperJS环境与您打开的页面之间的门;每次将闭包传递给evaluate()
时,您都会进入页面并执行代码,就像使用浏览器控制台一样。
因此,this
可能不会引用casper
,而是引用文档的全局对象。 this.echo
不存在并抛出错误,函数的其余部分未执行且未收集任何链接。因此,传递给run
的回调函数不会提前执行,收集链接的代码永远不会运行。
请尝试使用casper.echo("Getting links");
,或者只是删除通话并将其移至start
内:
casper.start('example.html', function() {
this.echo("Getting links");
links = this.evaluate(getLinks);
});