javascript - 尽管存在 JS 错误,Phantomjs 仍需要页面源

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

最佳答案

如果 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/

相关文章:

javascript - 在 Javascript 中组合条形图和折线图

javascript - Microsoft Edge 扩展 : will runtime. onInstalled 在加载未打包的扩展时发生火灾?

javascript - iOS 12 中的 PWA 在重新打开应用程序时不再重新执行 Javascript

html - 是否可以将容器的高度调整为包含的图像的高度?

某些请求的 Apache https 请求状态未决,返回 502 状态

git - SSL: 'unable to get local issuer certificate'

javascript - 子列表变体

javascript - node.js模块安装发布Microsoft.Cpp.x 64.Targets(146,5) : error MSB6006: "CL. exe

JavaScript 设置其中变量的值,然后在另一个调用中检索变量的数据

java - SSL - 只允许特定的客户端或服务器(Java 信任库)