在 CasperJS / PhantomJS 中捕获由 evaluate() 引起的错误?
Catch errors caused by evaluate() in CasperJS / PhantomJS?
我想知道为什么下面的代码没有通过使用 evaluate() 方法执行的 javascript 代码在控制台中获取错误输出。
casper.on 'resource.error', ->
@echo 'Resource error: ' + "Error code: "+resourceError.errorCode+" ErrorString: "+resourceError.errorString+" url: "+resourceError.url+" id: "+resourceError.id, "ERROR"
既然 evaluate() 在网络浏览器的上下文中执行代码,上面的代码不应该捕捉到由它引起的任何错误吗?
documentation to 'resource.error' 说明了一切:
Emitted when any requested resource fails to load properly. The received resourceError
object has the following properties
与页面错误无关。事实上 casper.evaluate()
and the PhantomJS equivalent page.evaluate()
不要向页面发送请求以与其交互。它都被烘焙到同一个引擎中。唯一的限制是 evaluate()
是沙盒。它无法访问外部定义的变量,因此您必须明确地将它们传入和传出。
你要的是"page.error" event:
Emitted when retrieved page leaves a Javascript error uncaught
以下面的完整脚本为例:
var casper = require('casper').create();
casper.on("remote.message", function(msg) {
this.echo("Console: " + msg);
});
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg);
});
casper.on("resource.error", function(msg, trace) {
this.echo("Res.Error: " + msg);
});
casper.start("http://example.com",function(){
this.evaluate(function(){
null.pop();
});
});
casper.run();
它输出:
Error: TypeError: null is not an object (evaluating 'null.pop')
我想知道为什么下面的代码没有通过使用 evaluate() 方法执行的 javascript 代码在控制台中获取错误输出。
casper.on 'resource.error', ->
@echo 'Resource error: ' + "Error code: "+resourceError.errorCode+" ErrorString: "+resourceError.errorString+" url: "+resourceError.url+" id: "+resourceError.id, "ERROR"
既然 evaluate() 在网络浏览器的上下文中执行代码,上面的代码不应该捕捉到由它引起的任何错误吗?
documentation to 'resource.error' 说明了一切:
Emitted when any requested resource fails to load properly. The received
resourceError
object has the following properties
与页面错误无关。事实上 casper.evaluate()
and the PhantomJS equivalent page.evaluate()
不要向页面发送请求以与其交互。它都被烘焙到同一个引擎中。唯一的限制是 evaluate()
是沙盒。它无法访问外部定义的变量,因此您必须明确地将它们传入和传出。
你要的是"page.error" event:
Emitted when retrieved page leaves a Javascript error uncaught
以下面的完整脚本为例:
var casper = require('casper').create();
casper.on("remote.message", function(msg) {
this.echo("Console: " + msg);
});
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg);
});
casper.on("resource.error", function(msg, trace) {
this.echo("Res.Error: " + msg);
});
casper.start("http://example.com",function(){
this.evaluate(function(){
null.pop();
});
});
casper.run();
它输出:
Error: TypeError: null is not an object (evaluating 'null.pop')