CasperJS/PhantomJS 加载页面时卡住
CasperJS/PhantomJS chokes on loading a page
我是 运行 以下带有 phantomjs 的脚本:
var casper = require('casper').create();
var url = 'https://itunesconnect.apple.com/itc/static/login?view=1&path=%2FWebObjects%2FiTunesConnect.woa%3F'
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
this.echo("file: " + trace[0].file, "WARNING");
this.echo("line: " + trace[0].line, "WARNING");
this.echo("function: " + trace[0]["function"], "WARNING");
errors.push(msg);
});
casper.start(url, function(){
casper.wait(7000, function(){
// casper.echo(casper.getHTML());
})
})
casper.run(function() {
if (errors.length > 0) {
this.echo(errors.length + ' Javascript errors found', "WARNING");
} else {
this.echo(errors.length + ' Javascript errors found', "INFO");
}
casper.exit();
});
几天前,我可以访问加载包含 2 个表单字段的 iframe 的页面,以允许用户登录。
现在我得到以下错误:
Error: Error: undefined is not a constructor (evaluating '$stateParams.path.startsWith('/')')
at setupDSiFrame (https://itunesconnect.apple.com/itc/static-resources/controllers/login_cntrl.js?cache=111920151100:99:46)
at https://itunesconnect.apple.com/itc/static-resources/controllers/login_cntrl.js?cache=111920151100:19:37
at $digest (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:13:11750)
at $apply (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:13:13237)
at f (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:56414)
at r (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:65848)
at onreadystatechange (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:66409)
file: https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100
line: 12
页面使用 slimerjs 作为引擎可以正常加载,但是当使用 slimerjs 时,登录表单不会被填写,因为 window 不在焦点上。
我认为这是一个问题,因为 casper 使用旧版本的 WebKit 并在加载页面时出现阻塞。我该如何解决这个问题?
来不及解决问题,但如果有人发现问题在 PhantomJS 中搜索 startsWith
的问题(就像我所做的那样),则可能对将来的参考有用:startsWith
方法已添加到ECMAScript 6 规范,PhantomJS 不支持。
一个很好的 polyfill 是 mathiasbynens/String.prototype.startsWith
我是 运行 以下带有 phantomjs 的脚本:
var casper = require('casper').create();
var url = 'https://itunesconnect.apple.com/itc/static/login?view=1&path=%2FWebObjects%2FiTunesConnect.woa%3F'
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
this.echo("file: " + trace[0].file, "WARNING");
this.echo("line: " + trace[0].line, "WARNING");
this.echo("function: " + trace[0]["function"], "WARNING");
errors.push(msg);
});
casper.start(url, function(){
casper.wait(7000, function(){
// casper.echo(casper.getHTML());
})
})
casper.run(function() {
if (errors.length > 0) {
this.echo(errors.length + ' Javascript errors found', "WARNING");
} else {
this.echo(errors.length + ' Javascript errors found', "INFO");
}
casper.exit();
});
几天前,我可以访问加载包含 2 个表单字段的 iframe 的页面,以允许用户登录。
现在我得到以下错误:
Error: Error: undefined is not a constructor (evaluating '$stateParams.path.startsWith('/')')
at setupDSiFrame (https://itunesconnect.apple.com/itc/static-resources/controllers/login_cntrl.js?cache=111920151100:99:46)
at https://itunesconnect.apple.com/itc/static-resources/controllers/login_cntrl.js?cache=111920151100:19:37
at $digest (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:13:11750)
at $apply (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:13:13237)
at f (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:56414)
at r (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:65848)
at onreadystatechange (https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100:12:66409)
file: https://itunesconnect.apple.com/itc/js/compiled/lib/vendor.js?cache=111920151100
line: 12
页面使用 slimerjs 作为引擎可以正常加载,但是当使用 slimerjs 时,登录表单不会被填写,因为 window 不在焦点上。 我认为这是一个问题,因为 casper 使用旧版本的 WebKit 并在加载页面时出现阻塞。我该如何解决这个问题?
来不及解决问题,但如果有人发现问题在 PhantomJS 中搜索 startsWith
的问题(就像我所做的那样),则可能对将来的参考有用:startsWith
方法已添加到ECMAScript 6 规范,PhantomJS 不支持。
一个很好的 polyfill 是 mathiasbynens/String.prototype.startsWith