[英]SpookyJS: Console.log Doesn't Work Inside Then
try {
var Spooky = require("spooky");
} catch (e) {
console.log(e);
}
var spooky = new Spooky({
capser: {
logLevel: "debug",
verbose: true
},
child: {
command: "./casperjs/bin/casperjs",
port: 8081,
spooky_lib: "./node_modules/spooky/"
}
}, function (err) {
if(err) {
console.log(err);
}
spooky.start("http://www.google.com");
spooky.then(function () {
console.log("7331");
this.emit("printmsg", "1337");
});
spooky.run();
});
spooky.on("printmsg", function (msg) {
console.log(msg);
});
spooky.on("error", function (e) {
console.error(e);
});
运行时,将显示1337
,但不会显示7331
。 为什么是这样? 我问的原因是因为当您要记录某些变量的值时,它使调试变得很困难。
另外,如果要更改then函数,如下所示:
spooky.then(function () {
var self = this;
this.evaluate(function () {
self.emit("printmsg", "Hello World!");
});
});
这将不起作用,因为evaluate
无法访问自变量。 在PhantomJS中,您可以将其设置为page.evaluate(function (self) {
但是当我使用Spooky尝试时它不起作用。因此,要记录数据非常困难。
有没有解决的办法?
自发布此问题以来,我已经找到了导致此问题的原因,因此,如果其他人遇到类似的问题,我将在下面分享答案:
在SpookyJS Github页面上的标准快速入门示例中,Spooky中有一个注释掉的“控制台”事件侦听器,当取消注释时,它将使Casper的所有输出出现在屏幕上:
// Uncomment this block to see all of the things Casper has to say.
// There are a lot.
// He has opinions.
spooky.on('console', function (line) {
console.log(line);
});
设置此事件侦听器后,它将把Casper的所有输出记录到屏幕上。 我试图在问题中登录控制台的示例都在Spooky传递给Casper进行处理的调用中运行,因此这就是为什么我看不到它们的原因。 设置了此事件侦听器后,将出现我的输出以及xShirase答案中__utils__.echo
函数调用使用的输出。
此外,Casper提供了一个echo
功能,可用于在Casper的评估功能之外发送输出,默认情况下,该功能只能访问所查看页面的范围:
spooky.then(function () {
this.echo("foo");
});
由于标准配置将Casper的日志记录级别设置为debug
并设置了详细日志记录,因此一旦设置了此事件侦听器,将显示很多信息。 通过将日志记录级别设置为error
或Casper支持的其他日志记录级别,可以避免这种情况。
哦,我是怎么努力的! 起初,我基本上是在做:
var msg = this.evaluate(function () {
return('1337');
});
console.log(msg);
然后我发现Casper在每个页面上注入了一个非常有用的clientutils模块: http ://docs.casperjs.org/en/latest/modules/clientutils.html
它使您能够像这样从远程DOM发送日志:
casper.then(function () {
this.evaluate(function () {
__utils__.echo('1337');
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.