javascript - 从评估方法调用时不会出现消息

标签 javascript casperjs

我是 casperjs 的新手,正在尝试使用它,但我无法使用它的 evaluate() 功能。

这是我的例子

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

casper.echo('started...');

casper.start('http://www.google.de/');

casper.then(function() {
    this.echo(this.getTitle());
});

casper.then(function() {
    this.evaluate(function() {
        this.echo('test');
    });
});

casper.run();

我正在用 casperjs sample.js 执行它

started...Google 之后控制台输出没有任何反应。 evaluate方法中给定的闭包函数没有执行。

我什至无法通过控制台使用 --verbose 获得更多信息。

我做错了什么?

最佳答案

casper.evaluate 内部回调是页面上下文。其中的所有内容都直接在页面上执行,并且是沙盒化的。 this 引用此回调中的 window 对象。我怀疑谷歌是否添加了 window.echo 函数。所以你不会在控制台中看到任何东西。 this.echocasper.echo 只能在页面上下文之外使用。

要真正从页面上下文中看到控制台消息,您需要注册到 remote.message事件:

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

然后向控制台写入一些内容:

this.evaluate(function() {
    console.log('test');
});

如果你已经注册到 page.error事件:

casper.on("page.error", function(pageErr){
    this.echo("page.err: " + JSON.stringify(pageErr));
});

您会看到,window.echo 无法调用,因为它是 undefined。调用它会导致 TypeError 停止执行 evaluate() 回调,然后返回 null 作为 evaluate()< 的结果 执行。

有关evaluate 的更多信息,请参阅我的回答 here .

注意:尝试在 google 上编写您的第一个脚本不是一个好主意,因为您会遇到多个问题。 Google 会嗅探用户代理,并会根据它为您提供不同的站点。还将考虑视口(viewport)大小。我建议您从 example.org 开始,然后是 stackoverflow.com,因为两者都运行良好。

关于javascript - 从评估方法调用时不会出现消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25135598/

相关文章:

docker - 从Docker容器访问localhost

javascript - Google Tag Manager "subscribe"是否发送到 dataLayer.push?如果是,如何?

javascript - 导航项 100% 分布在一个 div 中,填充均匀

javascript - 如何使用 JS/jQuery 将输入字段相互求和

javascript - onblur 不起作用,但 onchange 起作用吗?

fonts - 在 Debian 上为 CasperJS/PhantomJS 指定默认字体

javascript - 在循环中向 Javascript 日期添加小时数

javascript - CasperJS 登录表单等待成功

javascript - Casperjs 不允许使用外部模块?