我有以下 RequestURL.js
文件。
var webPage = require('webpage');
var system = require('system');
var page = webPage.create();
page.customHeaders = {"pragma": "akamai-x-feo-trace"};
page.settings.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
if (system.args.length === 1) {
console.log('Try to pass some args when invoking this script!');
} else {
page.open(system.args[1], function (status) {
var content = page.content;
console.log(content);
phantom.exit();
});
}
现在我正在执行以下命令来获取HTML源(在页面上执行JS后生成的HTML)。
phantomjs --ignore-ssl-errors=yes --ssl-protocol=any RequestURL.js #my_url_here > body.html
现在的问题是,如果页面上存在 JS 错误,则不会生成页面源代码。幻影中有没有一种方法可以基本上忽略任何错误并获得完整的生成页面源。
最佳答案
如果 JavaScript 错误发生在某个地方,整个页面 JavaScript 的执行可能会完全停止,如果页面是动态页面(例如单页应用程序),则意味着页面源实际上是空的。
要想走得更远,唯一的方法就是修复错误或阻止错误代码的执行。
例如:PhantomJS 1.x 不支持 Function.prototype.bind
。虽然在 CasperJS 源代码中存在一个 shim,但它不能正常工作,所以一个合适的 shim 必须是 introduced。
JavaScript 错误可以通过多种方式修复,但即时更改源并不是一个真正的选择,因为 PhantomJS 的事件不提供对请求内容的访问,而只提供对元数据的访问。如果源代码是通过 XHR 加载的,XHR proxy 或实际代理可以提供帮助。
有时 page.content
不显示页面源,但它就在那里。在这些情况下,它可以通过
page.evaluate(function(){
return document.documentElement.outerHTML;
});
还有一些选项是 here 。
关于javascript - 尽管存在 JS 错误,Phantomjs 仍需要页面源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27896360/