Casper JS运行方法提前解雇

时间:2014-04-12 17:36:13

标签: 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 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();
});

1 个答案:

答案 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);
});