4

我正在使用以下代码使用 phantomjs 截取页面的屏幕截图。它适用于大多数页面,但对某些 URL 显示“操作已取消”错误。

var page = require('webpage').create(),
system = require('system');

page.viewportSize = {
  width: 1366,
  height: 800
};

page.onConsoleMessage = function(msg) {
  console.log("CONSOLE MESSAGE:" + msg);
};

page.onResourceError = function(resourceError) {
    console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};

page.open(<URL>, function(status) {
  if (status !== 'success') {
    console.log('FAIL to load the address');
    phantom.exit();
  } else {
    page.render("3.png");

    phantom.exit();
  }
});
console.log("opening");

一些 URL 不起作用的示例是:http://india.gov.inhttp://timesofindia.indiatimes.com/

对于india.gov.in对 url 的第一个请求:http: //india.gov.in/正在中途重新发送,并且所有现有操作都在它之前被取消。其他一些 URL 也会发生类似的情况。

页面是否正在刷新?如果是,我该如何处理?

如何在 phantomjs 中遵循重定向/重新加载?

进一步的调查给了我一些更有趣的统计数据。在 india.gov.in 期间,phantomjs 在某一时刻开始发送请求并接收响应(在发出请求 id: 之后118),待处理请求的数量为37. 幻影“取消”了待处理的请求并从头开​​始加载页面。它再次开始发送请求。

在请求 id 之后156,待处理请求的数量再次增加37(这次它只收到一个请求的响应)。所以它再次“取消”了所有待处理的请求,重新开始。

在请求 id 之后194,待处理请求的数量再次增加,37因此它再次取消并重新启动。

在请求 id 之后232,待处理请求的数量再次增加,37但这次它没有重新启动和取消。

幻象可以处理的待处理请求的数量是否有限制?

谢谢!!

笔记!笔记!注意!:它可以与 phantomjs 2 一起使用。但由于它仍在开发中,因此无法在我的生产设置中使用。有谁知道 1.9.8 和 2.0 之间的更新修复了它吗?我可能会在 1.9.8 的源代码中导入该更改并构建它。

4

2 回答 2

0

参考这个问题。

https://github.com/ariya/phantomjs/issues/10522

这与缺乏对 bind() 的可靠支持有关。phantomjs 1.9.7 曾试图解决这个问题,但直到 2.0 版才完全解决。

该修复程序正在主分支中工作。您唯一的解决方案似乎是自己编译预发布 2.0 并在发布时升级到官方 2.0。

于 2014-11-18T20:30:40.017 回答
0

我也遇到了同样的问题,终于知道原因了。

您必须启用磁盘缓存。

phantomjs 的磁盘缓存有一个死锁错误。通过多次在同一个 url 上工作,我用完了这个错误。如果删除缓存目录,则一切正常。

于 2016-08-17T04:18:46.090 回答