我是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
的控制台获取更多信息。
我做错了什么?
答案 0 :(得分:7)
casper.evaluate
回调内部是页面上下文。它中的所有内容都直接在页面上执行,并且是沙箱。 this
指的是此回调中的window
对象。我怀疑谷歌添加了window.echo
功能。所以你不会在控制台中看到任何东西。 this.echo
或casper.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嗅探用户代理,并根据它为您提供不同的网站。此外,还将考虑视口大小。我建议你从example.org开始,然后是stackoverflow.com,因为两者都表现得相当好。