尽管存在JS错误,Phantomjs仍需要页面源代码



我有以下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源代码中存在一个填充程序,但它不能正常工作,因此必须引入适当的填充程序。

JavaScript 错误可以通过多种方式修复,但动态更改源代码并不是一个真正的选择,因为 PhantomJS 的事件不提供对请求内容的访问,而只提供对元数据的访问。如果源是通过 XHR 加载的,XHR 代理或实际代理可以提供帮助。

有时page.content不显示页面源代码,但它就在那里。在这些情况下,可以通过

page.evaluate(function(){
    return document.documentElement.outerHTML;
});

这里还有更多选择。

最新更新