javascript - 如何在casperjs的evaluate函数中输出log
大家讲道理
大家讲道理 2017-04-10 14:35:34
0
2
742

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');
});

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(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 应该可以执行,但是没有反馈,也不晓得执行没得。

伊谢尔伦

通过测试发现有三种方案

壹 console记录的日志,会和页面本身的console信息混合输出


    casper.on('remote.message', function(msg) {
      this.log(msg, 'info');
    });
    casper.open('http://www.baidu.com/', function() {
      this.evaluate(function() {
        console.log('from console.log');
      });
    });

贰 alert记录的日志

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

叁 [推荐] 官方实例

    casper.start('http://www.google.fr/', function() {
        this.echo('Page title is: ' + this.evaluate(function() {
            return document.title;
        }), 'INFO'); // Will be printed in green on the console
    });
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板