PhantomJS无法打开HTTPS站点

Sre*_*ag 103 https screen-scraping phantomjs

我正在使用以下基于loadspeed.js示例的代码打开一个https://站点,该站点也需要http服务器身份验证.

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

page.settings.userName = 'myusername';
page.settings.password = 'mypassword';

if (system.args.length === 1) {
    console.log('Usage: scrape.js <some URL>');
    phantom.exit();
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));
            console.log('Loading time ' + t + ' msec');
        }
        phantom.exit();
    });
}  
Run Code Online (Sandbox Code Playgroud)

它无法一直加载页面.这可能有什么问题?安全网站的处理方式是否有所不同?但是,可以从浏览器成功访问该站点.

我现在刚刚开始使用Phantom并发现即使我没有继续解决这个问题也不能停止玩游戏.

JLa*_*rky 151

我尝试了Fred和Cameron Tinker的答案,但只有--ssl-protocol =任何选项似乎对我有所帮助:

phantomjs --ssl-protocol=any test.js
Run Code Online (Sandbox Code Playgroud)

另外我认为--ssl-protocol=any使用加密应该更安全,但是--ignore-ssl-errors=true会忽略(duh)所有ssl错误,包括恶意错误.


Cam*_*ker 121

问题很可能是由于SSL证书错误造成的.如果使用--ignore-ssl-errors = yes选项启动phantomjs ,它应该继续加载页面,如果没有SSL错误那样:

phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]
Run Code Online (Sandbox Code Playgroud)

我已经看到一些网站在错误地实现他们的SSL证书或者他们已经过期等方面存在问题.有关phantomjs的完整命令行选项列表,请访问:http://phantomjs.org/api/command-line . HTML.我希望这有帮助.

  • 曾尝试过选项,它仍然失败:( (11认同)
  • 圣猴.我希望解释SSL错误,只有堆栈溢出和粉红色的独角兽帮助我找到根本原因.多谢你们 (7认同)
  • 谢谢,这也解决了我的问题.我的情况是,我没有在浏览器上收到Cert错误,所以它非常令人困惑,但我确实卷曲了,并注意到一个不起作用的是使用Wildcard Cert(即:CN =*.example.com).如果phantomjs可以返回详细原因,那将是非常好的. (2认同)

Mic*_*cah 71

请注意,截至2014-10-16,PhantomJS默认使用SSLv3打开HTTPS连接.随着最近宣布的POODLE漏洞,许多服务器都禁用了SSLv3支持.

要解决这个问题,您应该能够运行PhantomJS:

phantomjs --ssl-protocol=tlsv1
Run Code Online (Sandbox Code Playgroud)

希望PhantomJS能够尽快更新,使TLSv1成为默认值而不是SSLv3.

  • 版本1.9.8将默认值切换为TLSv1:https://github.com/ariya/phantomjs/issues/12670 (4认同)
  • 如何从SSL握手问题中获得更详细的调试? (3认同)
  • 请注意,更新到PhantomJS 1.9.8会导致[新错误](https://github.com/ariya/phantomjs/issues/12697). (2认同)

Fre*_*red 24

遇到同样的问题......
--ignore-ssl-errors = yes还不足以为我修复它,不得不再做两件事:
1)改变用户代理
2)尝试了所有的ssl-protocols,唯一有效的有问题的页面是tlsv1
希望这有帮助......

  • 将ssl-protocols更改为tlsv1对我也有用,谢谢! (2认同)

Joj*_*jje 15

我遇到了同样的问题(casperjs 1.1.0-beta3/phantomjs 1.9.7).使用--ignore-ssl-errors = yes和--ssl-protocol = tlsv1解决了它.仅使用其中一个选项并不能解决这个问题.