Javascript SpookyJS:Console.log不';那我就不在里面工作了

Javascript SpookyJS:Console.log不';那我就不在里面工作了,javascript,node.js,phantomjs,casperjs,spookyjs,Javascript,Node.js,Phantomjs,Casperjs,Spookyjs,运行时,将显示1337,但不会显示7331。为什么会这样?我问这个问题的原因是,当您想要记录某些变量的值时,调试会变得很困难 此外,如果要更改then函数,请执行以下操作: try { var Spooky = require("spooky"); } catch (e) { console.log(e); } var spooky = new Spooky({ capser: { logLevel: "debug", verbose: true }, ch

运行时,将显示
1337
,但不会显示
7331
。为什么会这样?我问这个问题的原因是,当您想要记录某些变量的值时,调试会变得很困难

此外,如果要更改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);
});
这将不起作用,因为
evaluate
无权访问自变量。在PhantomJS中,您可以将其设置为
page.evaluate(function(self){
,但当我使用Spooky进行尝试时,这不起作用。因此,在需要时很难记录数据


有办法解决这个问题吗?

哦,我怎么会跟那件事混在一起! 起初,我基本上在做:

spooky.then(function () {
  var self = this;
  this.evaluate(function () {
    self.emit("printmsg", "Hello World!");
  });
});
然后我发现Casper向每个页面注入了一个非常有用的clientutils模块:

它使您能够从远程DOM发送日志,如下所示:

var msg = this.evaluate(function () {
    return('1337');
  });
console.log(msg);

哦,我怎么会跟那个人混在一起! 起初,我基本上在做:

spooky.then(function () {
  var self = this;
  this.evaluate(function () {
    self.emit("printmsg", "Hello World!");
  });
});
然后我发现Casper向每个页面注入了一个非常有用的clientutils模块:

它使您能够从远程DOM发送日志,如下所示:

var msg = this.evaluate(function () {
    return('1337');
  });
console.log(msg);

自从发布这个问题以来,我发现了导致我出现这个问题的原因,所以我将在下面分享答案,以防其他人遇到类似问题:

在上的标准快速启动示例中,Spooky中有一个已注释掉的“console”事件侦听器,未注释时,将导致Casper的所有输出显示在屏幕上:

casper.then(function () {
this.evaluate(function () {
    __utils__.echo('1337');
  });
});
设置此事件侦听器后,它会将Casper的所有输出记录到屏幕上。我在问题中尝试登录到控制台的示例都是在Spooky传递给Casper处理的调用中运行的,因此我没有看到它们显示。设置此事件侦听器后,我的输出以及使用的输出都会显示出来通过xShirase答案中的
\uUtils\uUtils.echo
函数调用

此外,Casper还提供了一个
echo
函数,该函数可用于在Casper的evaluate函数之外发送输出,默认情况下,该函数只能访问正在查看的页面范围:

// 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的日志记录级别设置为
debug
,并将详细日志记录设置为on,因此一旦设置了此事件侦听器,将显示大量信息。可以通过将日志记录级别设置为
error
或其他方式来避免此问题。

发布此问题后,我发现了导致此问题的原因如果其他人遇到类似问题,我将分享以下答案:

在上的标准快速启动示例中,Spooky中有一个已注释掉的“console”事件侦听器,未注释时,将导致Casper的所有输出显示在屏幕上:

casper.then(function () {
this.evaluate(function () {
    __utils__.echo('1337');
  });
});
设置此事件侦听器后,它会将Casper的所有输出记录到屏幕上。我在问题中尝试登录到控制台的示例都是在Spooky传递给Casper处理的调用中运行的,因此我没有看到它们显示。设置此事件侦听器后,我的输出以及使用的输出都会显示出来通过xShirase答案中的
\uUtils\uUtils.echo
函数调用

此外,Casper还提供了一个
echo
函数,该函数可用于在Casper的evaluate函数之外发送输出,默认情况下,该函数只能访问正在查看的页面范围:

// 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的日志记录级别设置为
debug
,并将详细日志记录设置为on,因此一旦设置此事件侦听器,将显示大量信息。可以通过将日志记录级别设置为
error
或其他方式来避免此问题。

感谢您的响应。不过,您确定这适用于Spooky吗?
spooky.start(“http://www.google.com);spooky.then(函数(){this.evaluate(函数(){{uUtils_utils_UuUtils.echo(“1337!”);})
当我运行它时,它仍然没有打印任何内容。Spooky创建了一个Casper实例,所以是的,它肯定可以工作。嗯,它不工作。但是它看起来像Spooky github(我应该先检查它,但没有检查)是说调用emit函数,然后让evaluate返回一些东西作为参数,这很有趣。不过,谢谢你的回答,肯定会在将来使用Casper时给我一些帮助。谢谢你的回答。你确定这对Spooky有效吗?
Spooky.start(“http://www.google.com");spooky.then(function(){this.evaluate(function(){uuuuUtils_uuUtils.echo(“1337!”)});
在我运行它时仍然没有打印任何内容。spooky创建了一个Casper实例,所以是的,它肯定会工作得很好它不工作。但是它看起来像spooky github(我应该先检查一下,但没有检查)是说调用emit函数,然后让evaluate返回一些东西作为参数,这很有趣。不过,感谢你的回答,肯定会在将来使用Casper时给我一些帮助。如果没有输入错误,这可能会更早被发现:
capser
应该是
Casper
。这可能是cau如果前面没有输入错误:
capser
应该是
casper