如何在casperjs的evaluate函数中输出log

casperjs的evaluate函数中使用casper.log就无法输出,代码如下

var casper = require('casper').create({
    'verbose': true,
    'logLevel': 'debug'
});

casper.start('http://www.baidu.com/', function() {
    this.evaluate(function() {
        this.log('asd', 'error'); // 这一条无法输出
    });
}); 

大概的原因我也知道,应该是evaluate中的东西相当于在一个sandbox中执行,要与外界交互是只能通过特定的接口的

但这样造成我写程序的不便,因为在evaluate函数中就可能发生一些不可预期的情况,而我想把它log下来

我目前有两种解决方案

  1. evaluate函数返回时添加一个errorCode,从而判断发生了什么错误或者warning
  2. evaluate中使用console.log,并在外面监听remote.message,但这样等于多了一个日志流出来,也是十分不便

第二种解决方法的代码

casper.start('http://www.baidu.com/', function() {
    this.evaluate(function() {
        console.log('asd');
    });
}); 

casper.on('remote.message', function(msg) {
    this.log(msg, 'info');
});

所以有什么更好的解决方案吗?

阅读 7.7k
2 个回答

大概看了下 casper 的文件,evaluation 应该是在你打开的页面上执行函数,所以里面的代码貌似应该像是在写页面代码那样吧。

我看示例是写的代码用于登录,所以尝试了一下这段

var casper = require('casper').create({
    'verbose': true,
    'logLevel': 'debug'
});

casper.start('http://www.baidu.com/', function() {
    this.log("start http://www.baidu.com")
    this.evaluate(function() {
        alert("hello world")
    });
});

casper.run();

输出的内容中有一句:

[info] [remote] [alert] hello world

在页面上调用 casper 的东西不太可能,this.log 应该等同于 window.log,是个不存在的函数,理论上来说 console.log 应该可以执行,但是没有反馈,也不晓得执行没得。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题