Javascript casperjsrun方法提前触发

Javascript casperjsrun方法提前触发,javascript,casperjs,Javascript,Casperjs,向函数中添加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 Arr

向函数中添加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();
});
var casper=require('casper').create();
函数getLinks(){

此.echo(“获取链接”);//从未与casper.js一起使用过,而是来自:

作为提醒,请将
evaluate()
方法视为CasperJS环境和您打开的页面之间的一道大门;每次您向
evaluate()
传递闭包时,您都会进入页面并执行代码,就好像您在使用浏览器控制台一样

因此,
this
可能不是指
casper
,而是指文档的全局对象。
this.echo
不存在并抛出错误,函数的其余部分没有执行,也没有收集链接。因此,传递给
run
的回调函数不是提前执行的,而是要收集e链接永远不会运行

请尝试
casper.echo(“获取链接”);
,或者干脆删除呼叫并将其移动到
start

casper.start('example.html', function() {
  this.echo("Getting links");
  links = this.evaluate(getLinks);
});