Javascript 从evaluate方法调用时不显示消息

Javascript 从evaluate方法调用时不显示消息,javascript,casperjs,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() {

我不熟悉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执行它

启动之后…
Google
在控制台输出中没有发生任何事情。不执行evaluate方法中给出的闭包函数

我甚至无法通过控制台通过
--verbose
获取更多信息

我做错了什么?

回调的内部是页面上下文。其中的所有内容都直接在页面上执行,并且是沙盒
引用此回调中的
窗口
对象。我怀疑谷歌添加了
window.echo
功能。因此,您将不会在控制台中看到某些内容
this.echo
casper.echo
仅在页面上下文之外可用

要从页面上下文中实际查看控制台消息,您需要注册到事件:

casper.on(“remote.message”,函数(msg){
this.echo(“remote.msg:+msg”);
});
然后在控制台上写一些东西:

this.evaluate(函数(){
console.log('test');
});
如果您已注册参加该活动:

casper.on(“page.error”,函数(pageErr){
this.echo(“page.err:+JSON.stringify(pageErr));
});
您会看到,无法调用
window.echo
,因为它是
未定义的
。调用它将导致TypeError,它停止执行
evaluate()
回调,然后作为执行
evaluate()
的结果,它将为您提供
null

有关
评估的更多信息,请参见我的答案

注意:尝试在google上编写您的第一个脚本不是一个好主意,因为您将遇到多个问题。谷歌嗅探用户代理,并将根据它给你一个不同的网站。此外,还将考虑视口大小。我建议您先从example.org开始,然后再从stackoverflow.com开始,因为两者都表现得相当好。

回调的内部是页面上下文。其中的所有内容都直接在页面上执行,并且是沙盒
引用此回调中的
窗口
对象。我怀疑谷歌添加了
window.echo
功能。因此,您将不会在控制台中看到某些内容
this.echo
casper.echo
仅在页面上下文之外可用

要从页面上下文中实际查看控制台消息,您需要注册到事件:

casper.on(“remote.message”,函数(msg){
this.echo(“remote.msg:+msg”);
});
然后在控制台上写一些东西:

this.evaluate(函数(){
console.log('test');
});
如果您已注册参加该活动:

casper.on(“page.error”,函数(pageErr){
this.echo(“page.err:+JSON.stringify(pageErr));
});
您会看到,无法调用
window.echo
,因为它是
未定义的
。调用它将导致TypeError,它停止执行
evaluate()
回调,然后作为执行
evaluate()
的结果,它将为您提供
null

有关
评估的更多信息,请参见我的答案

注意:尝试在google上编写您的第一个脚本不是一个好主意,因为您将遇到多个问题。谷歌嗅探用户代理,并将根据它给你一个不同的网站。此外,还将考虑视口大小。我建议您先从example.org开始,然后再从stackoverflow.com开始,因为两者的表现都相当不错