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

时间:2015-01-12 06:19:32

标签: javascript html ssl 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错误,则不会生成页面源代码。幻影中有没有办法基本上忽略任何错误并获得完整生成的页面源。

1 个答案:

答案 0 :(得分:0)

如果JavaScript错误在某个地方,整个页面JavaScript的执行可以完全停止,如果页面是动态页面(例如单页面应用程序),则意味着页面源实际上是空的。 / p>

进一步的唯一方法是修复错误或防止错误代码执行。

例如:PhantomJS 1.x不支持Function.prototype.bind。虽然CasperJS源中存在垫片,但它无法正常工作,因此正确的垫片必须为introduced

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

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

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

更多选项是here