2

以下代码使用casper.js不输出This is thenEvaluate字符串,因为Twitter.com已禁用console.log(空函数):

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

casper.start("http://twitter.com");

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
})

casper.thenEvaluate(function() {
    console.log('This is thenEvaluate');
});

casper.run();

如果我将url交换到google.com或任何其他网站,它就可以工作。我的问题是:

  1. 对于网站禁用console.log,有没有办法重新启用它?

  2. 如果 #1 没有,有没有办法在内部evaluate()thenEvaluate()函数中做任何类型的日志?

谢谢。

4

3 回答 3

1

我在这里找到了关于恢复 console.log()的答案

var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window.console = i.contentWindow.console;
于 2012-11-25T00:26:32.893 回答
1

只需删除对象的log属性console

>>> console.log('plop')
undefined
>>> delete console.log
true
>>> console.log('plop')
plop
undefined

这可以用 casper 给出:

var casper = require('casper').create();

casper.start("http://twitter.com");

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
})

casper.thenEvaluate(function() {
    delete console.log;
    console.log('This is thenEvaluate');
});

casper.run();

免责声明:在这里找到答案,原作者应相应注明。

于 2012-11-26T09:36:55.277 回答
0

视觉断言

您可能需要考虑构建一个断言小部件,它将一种可视化的 console.log 效果附加到 DOM,然后您可以输出文本。我在 Github 上有一个 Gist,我已经在这种情况下实现了类似的东西:https ://gist.github.com/3773871

如果您只是将该代码调用到您的程序中,则可以使用

assert(true, 'This is thenEvaluate()')

显然,您并没有真正将它用作正确的断言,但如果您只是传入 true 和一个字符串并调用它来代替控制台日志,它会将您的结果输出到屏幕右上角的绝对定位元素阅读。

于 2012-11-25T00:17:01.253 回答