我正在尝试为搜索引擎优化目的制作一个抓取工具,我似乎无法让PhantomJS至少下载此特定页面:https://tablet.euroslots.com/home/
如果我使用cURL它工作正常(但显然不处理javascript):
✓ 1344:0 /cherrytech/js-crawler root› curl https://tablet.euroslots.com/home/
<!doctype html><!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"> ...
My PhantomJS脚本:
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};
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.settings.userAgent = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A406 Safari/8536.25';
page.open('https://tablet.euroslots.com/home/', function() {
console.log(page.content);
phantom.exit();
});
这是运行它的结果:
✓ 1347:0 /cherrytech/js-crawler root› phantomjs crawler.js
Request {
"headers": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A406 Safari/8536.25"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
],
"id": 1,
"method": "GET",
"time": "2014-09-16T16:02:24.426Z",
"url": "https://tablet.euroslots.com/home/"
}
Unable to load resource (#1URL:https://tablet.euroslots.com/home/)
Error code: 2. Description: Connection closed
Response (#1, stage "end"): {"contentType":null,"headers":[],"id":1,"redirectURL":null,"stage":"end","status":null,"statusText":null,"time":"2014-09-16T16:02:24.763Z","url":"https://tablet.euroslots.com/home/"}
<html><head></head><body></body></html>
答案 0 :(得分:3)
尝试使用--ssl-protocol = any
调用phantomjs我有一个完全相同的问题,一个星期前有一个外部网站。
所以我搜索了一下,发现了Qt QNetworkReply connection closed中描述的相关问题。它帮助我调查了phantomjs的嵌入式Qt:它默认强制在SSLv3中建立新的连接,这对于旧站点来说太新了,或者对于新站点来说太旧了(但是在Qt 4.8.4时是非常合理的默认值)释放)。
使用“any”,你告诉phantomjs尝试所有协议,这应该可以帮助你通过测试。它将尝试比SSLv3更安全的协议,但SSLv3的安全性也低于SSLv3(SSLv3处于中间范围)。因此,如果“any”有效,那么您应该尝试强制使用比SSLv3更安全的值而不是“any”。在我的例子中,指定--ssl-protocol = tlsv1工作。
猜猜最近SSL的问题(goto fail,heartbleed,poodle等)使得很多网站升级了他们的服务器,现在拒绝SSLv3连接。 但是,如果您的服务器使用比SSLv3更旧的协议,请保留“any”(以及所有相关的安全风险......)。