无法使用PhantomJS

时间:2015-06-21 10:40:48

标签: javascript html http web-scraping phantomjs

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

  

错误代码5,操作已取消

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

我正在运行的命令是:

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

即使我删除了诸如cookies-file,ignore-ssl-errors,ssl-protocol之类的选项,结果仍然是相同的。

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无法加载并将其粘贴到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) {
  ...

但没有改变。

我的想法已经不多了..

1 个答案:

答案 0 :(得分:0)

对于在寻求资源解决方案的过程中遇到此页面的编码人员没有完全加载到phantomjs上。我有一个项目,脚本将停止/挂起一些资源。如果它会执行或不执行,它是50/50。

一些挖掘,我找到了以下页面: https://github.com/ariya/phantomjs/issues/10652

为我设置资源超时的解决方案在哪里:

page.settings.resourceTimeout = 10000;

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