我正在使用以下代码使用 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.in
、http://timesofindia.indiatimes.com/
等
对于 india.gov.in
,第一个请求到 url:http://india.gov.in/正在中途重新发送,并且所有现有操作都在它之前被取消。其他一些 URL 也会发生类似的情况。
页面是否正在刷新?如果是,我该如何处理?
如何在 phantomjs 中遵循重定向/重新加载?
进一步的调查给了我一些更有趣的统计数据。在 india.gov.in 期间,phantomjs 开始一次发送请求和接收响应(发出请求 ID:118
后),待处理请求的数量为 37
。 Phantom“取消”了待处理的请求并从头开始加载页面。它再次开始发送请求。
在请求 ID 156
之后,待处理请求的数量再次变为 37
(这次它只收到一个请求的响应)。因此它再次“取消”了所有待处理的请求。
在请求 ID 194
之后,待处理请求的数量再次为 37
,因此它再次取消并重新启动。
在请求 ID 232
之后,待处理请求的数量再次为 37
但这次它没有重新启动和取消。
phantom 可以处理的待处理请求的数量是否有限制?
谢谢!!
注意!笔记!注意!: 它开箱即用,可与 phantomjs 2 一起使用。但由于它仍在开发中,因此无法在我的生产设置中使用。有谁知道 1.9.8 和 2.0 之间的哪个更新修复了它?我可能可以在 1.9.8 的源代码中导入该更改并构建它。
最佳答案
引用这个问题。
https://github.com/ariya/phantomjs/issues/10522
这是因为缺少对 bind() 的可靠支持。 phantomjs 1.9.7 曾尝试解决这个问题,但直到 2.0 版才完全解决。
修复在主分支中工作。你唯一的解决方案似乎是自己编译预发布 2.0 并在发布时升级到官方 2.0。
关于http - Phantomjs 无法打开某些 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830906/