举个例子,为什么是categoryId null?
var scripts = this.evaluate(function() {
var raScripts = "A lengthy script";
return raScripts;
});
var categoryId = this.evaluate(function() {
var text = 'more text';
var lengthyScript = scripts + ' ' + text;
return lengthyScript;
});
this.echo('Status: ' + categoryId);
// categoryId is null发布于 2017-08-12 00:02:08
我认为这是因为您的scripts变量没有在浏览器环境中定义(它只在您的Casper环境中定义)。实际上,当您使用evaluate时,上下文是DOM,而不是Casper实例。
这将返回null
var casper = require('casper').create();
var tag = 'h1'; // This is our global variable...
casper.start('http://example.com/');
casper.waitForSelector('body', function () {
this.echo(this.evaluate(function () {
return document.querySelector(tag).textContent; // Oops!
}));
});
casper.run();但是如果我们在evaluate的上下文中注入我们的变量,我们会得到预期的结果(即“示例域”):
var casper = require('casper').create();
casper.start('http://example.com/');
casper.waitForSelector('body', function () {
this.echo(this.evaluate(function (tag) {
return document.querySelector(tag).textContent;
}, 'h1'));
});
casper.run();https://stackoverflow.com/questions/45637691
复制相似问题