Javascript casperjsrun方法提前触发
向函数中添加this.echo命令会导致在设置链接之前调用casper.run方法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
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);
});