在函数中添加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();
});发布于 2014-04-12 18:12:03
从未与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);
});https://stackoverflow.com/questions/23033856
复制相似问题