繁体   English   中英

SpookyJS:Console.log在内部不起作用

[英]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并设置了详细日志记录,因此一旦设置了此事件侦听器,将显示很多信息。 通过将日志记录级别设置为errorCasper支持的其他日志记录级别,可以避免这种情况。

哦,我是怎么努力的! 起初,我基本上是在做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM