无法使用PhantomJS加载页面资源

Unable to load page resources with PhantomJS

本文关键字:资源 加载 PhantomJS      更新时间:2023-09-26

我正在使用PhantomJS获取给定URL的页面内容。问题是在一些页面上PhantomJS无法加载一些资源(js,css…),我得到的错误是:

错误代码5,操作已取消

我可以在www.lifehacker.com上重现这个问题的网页我无法获得的资源是:

  • http://x.kinja-static.com/assets/stylesheets/tiger-4ee27d6612a71ee3c68440f8e9c0025c.css
  • http://c.amazon-adsystem.com/aax2/amzn_ads.js
  • 还有其他一些

我运行的命令是:

phantomjs --debug=true --cookies-file=cookies.txt --ignore-ssl-errors=true --ssl-protocol=tlsv1 fetchpage.js http://www.lifehacker.com

即使我删除了cookie文件等选项,忽略ssl错误,ssl协议的结果仍然是一样的。

fetchpage.js脚本是:

var webPage = require('webpage');
var system = require('system');
var page = webPage.create();
if (system.args.length === 1) {
  console.log('Usage: fetchpage.js <some URL>');
  phantom.exit(1);
}
var url = system.args[1];
page.open(url, function (status) {
  console.log("STATUS: " + status);
  if (status !== 'success') {
    console.log(
      "Error opening url '"" + page.reason_url
      + "'": " + page.reason
      + "'": " + page
    );
    phantom.exit(1);
  } else {
    var content = page.content;
    console.log(content);
    phantom.exit(1);
  }
});

如果我在Chrome中打开同一个页面,页面加载就很好。此外,如果我复制那些phantomjs无法加载的资源URL并将其粘贴到Chrome中,它们加载得很好。

我试过在谷歌上搜索类似的问题,但我只找到了一些关于设置超时的建议,但对我来说不起作用

我在phantomjs v1.9.0、1.9.8和2.0.1开发中也尝试过同样的方法。

更有趣的是,有时phantomjs脚本能够从所有资源中获得完全响应,所以我怀疑缓存,但我无法强制服务器避免缓存。我尝试过通过phantomjs发送自定义的头,如下所示:

...
var page = webPage.create();
page.customHeaders = {
    "Cache-Control":"no-cache",
    "Pragma":"no-cache"
};
page.open(url, function (status) {
  ...

但一切都没有改变。

我没什么主意了。。

对于那些在寻求解决未完全加载在phantomjs上的资源时遇到此页面的程序员。我有一个项目,脚本会在一些资源上停滞/挂起。它是否会执行,是50/50。

经过一番挖掘,我发现了以下页面:https://github.com/ariya/phantomjs/issues/10652

设置资源超时的解决方案对我来说是可行的:

page.settings.resourceTimeout = 10000;

关于上述问题,我不确定这是否完全正确,但至少现在信息更容易找到,可以被视为解决某些问题的一部分。