Events Casperjs未在评估中的错误时触发page.error事件

Events Casperjs未在评估中的错误时触发page.error事件,events,listener,phantomjs,casperjs,Events,Listener,Phantomjs,Casperjs,我想在Casper中捕获远程页面上的错误 casper.thenEvaluate -> document.querySelector("#selector-doesnt-exist").attribute-doesnt-exist = 'value' 我设置了以下侦听器: casper.on "page.error", (message, trace) -> console.log(message) casper.on "remote.message", (message

我想在Casper中捕获远程页面上的错误

casper.thenEvaluate ->
  document.querySelector("#selector-doesnt-exist").attribute-doesnt-exist = 'value'
我设置了以下侦听器:

casper.on "page.error", (message, trace) ->
  console.log(message)

casper.on "remote.message", (message) ->
  console.log(message)

当评估失败时,这两项都不会触发。有没有办法监听远程页面上的错误?

我也不知道怎么做,可能还有更合适的方法

假设您只想捕获自己的评估代码中的错误(而不是正在加载的站点部分的错误),一种解决方案是包装casper evaluate函数以包含try catch,并通过从评估返回来处理错误:

casper.myevaluate = (fn, args...) ->
  s = @evaluate (fn,args) ->
    try
      fn.apply(this,args)
    catch e
      return {'ourError':e}
  , fn, args

  if s.ourError?
      ErrorHandler.Exception(s.ourError)
  return s
例如,打电话:

casper.myevaluate ()-> silly
…将使用
ReferenceError:cannotfind variable:silly调用错误处理程序代码