尝试使用PhantomJS来处理网页的问题[英] Issue trying to use PhantomJS to process a web page

问题描述

我正在尝试为 SEO 目的制作一个爬虫,但我似乎无法让 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"> ...

我的 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>

推荐答案

尝试用--ssl-protocol=any调用phantomjs

我遇到了同样的问题,一个星期前可以使用的外部网站.

所以我进行了搜索,发现 Qt QNetworkReply connection closed 中描述的相关问题.它帮助我查看了 phantomjs 的嵌入式 Qt:它默认强制 SSLv3 中的新连接,这对于旧站点来说太新了,或者对于新站点来说太旧了(但在 Qt 4.8.4 时这是一个相当合理的默认设置)发布).

使用"any",您告诉 phantomjs 尝试所有协议,这应该可以帮助您通过测试.它将尝试比 SSLv3 更安全的协议,但也比 SSLv3 更安全(SSLv3 处于中等范围).因此,如果"any"有效,那么您应该尝试强制使用比 SSLv3 更安全的值,而不是让"any".就我而言,指定 --ssl-protocol=tlsv1 有效.

猜猜最近 SSL 的问题(goto fail、heartbleed、poodle 等)导致很多网站升级他们的服务器,现在拒绝 SSLv3 连接.但如果您的服务器使用旧于 SSLv3 的协议,请保留"任何"(以及所有相关的安全风险……).

本文地址:https://www.itbaoku.cn/post/1740200.html