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
。