PhantomJS无法打开HTTPS站点

PhantomJS无法打开HTTPS站点,https,screen-scraping,phantomjs,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) {

我使用以下基于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();
    });
}  
var page=require('webpage')。create(),system=require('system'),t,address;
page.settings.userName='myusername';
page.settings.password='mypassword';
if(system.args.length==1){
log('Usage:scrape.js');
phantom.exit();
}否则{
t=日期。现在();
地址=system.args[1];
第页打开(地址、功能(状态){
如果(状态!=“成功”){
console.log('加载地址失败');
}否则{
t=Date.now()-t;
console.log('页面标题为'+Page.evaluate(函数(){
返回文件.title;
}));
log('Loading time'+t+'msec');
}
phantom.exit();
});
}  
始终无法加载页面。这里可能出了什么问题?安全站点的处理是否有任何不同?但可以通过浏览器成功访问该网站


我现在刚开始使用Phantom,发现即使我没有继续讨论这个问题,也不要再到处玩了。

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

phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]

我看到一些网站在错误实现SSL证书或证书过期等方面存在问题。此处提供了phantomjs命令行选项的完整列表:。我希望这能有所帮助。

遇到了同样的问题…
--ignore ssl errors=yes不足以为我修复它, 我们还要做两件事:
1) 更改用户代理
2) 尝试了所有的ssl协议,唯一有效的是tlsv1

希望这有助于…

如果有人将Phantomjs与Sahi一起使用,
--ignore ssl errors
选项需要放在浏览器的\u types.xml文件中。这对我有用

<browserType>
    <name>phantomjs</name>
    <displayName>PhantomJS</displayName>
    <icon>safari.png</icon>
    <path>/usr/local/Cellar/phantomjs/1.9.2/bin/phantomjs</path>
    <options>--ignore-ssl-errors=yes --debug=yes --proxy=localhost:9999 /usr/local/Cellar/phantomjs/phantom-sahi.js</options>
    <processName>"PhantomJS"</processName>
    <capacity>100</capacity>
    <force>true</force>
</browserType>

幻影
幻影
safari.png
/usr/local/ceral/phantomjs/1.9.2/bin/phantomjs
--忽略ssl错误=yes--debug=yes--proxy=localhost:9999/usr/local/ceral/phantomjs/phantomsahi.js
“幻影”
100
真的

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

phantomjs --ssl-protocol=any test.js

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

注意,从2014-10-16起,PhantomJS默认使用SSLv3打开HTTPS连接。随着最近的发布,许多服务器正在禁用SSLv3支持

要解决这个问题,您应该能够使用以下工具运行PhantomJS:

phantomjs --ssl-protocol=tlsv1

希望PhantomJS很快就会更新,使TLSv1成为默认值,而不是SSLv3。

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

我收到

从phantomJS(在CentOS 6.6上运行)创建“SSL上下文”时出错

从源代码构建为我修复了它。别忘了使用您构建的phantomjs。(如果您有/usr/local/bin/phantomjs,请使用它)

sudo yum-y安装gcc-gcc++make flex bison gperf ruby openssl devel freetype devel fontconfig devel libicu devel sqlite devel libpng devel libjpeg devel
git克隆git://github.com/ariya/phantomjs.git
cd幻影
git checkout 2.0
/build.sh
光盘盒/
/幻影
shebang怎么样? 如果使用shebang执行
phantomjs
脚本,请使用以下shebang行

#!/usr/bin/phantomjs --ignore-ssl-errors=yes
    
var system = require('system');
var webpage = require('webpage');

// ... rest of your script

使用上面的任何答案。我个人喜欢
--ignore ssl errors=yes
,因为验证我的环回web服务器的自签名证书与此无关。

这里的其他答案都没有帮助我;可能是我使用的特定站点对其HTTP头过于挑剔。这就是有效的原因:

var page = webpage.create();
page.customHeaders = {
    "Connection": "keep-alive"
};

我发现PhantomJS使用的是“保持活动”(大写),而连接没有保持活动状态。

昨天我得到的
SSL握手失败了。
我尝试了许多PhantomJS选项组合(
--忽略SSL错误=yes
等),但没有一个有效

升级到PhantomJS2.1.1修复了它


我在上使用了phantomJS安装说明,将phantomJS版本更改为2.1.1。

唯一对我有效的方法是将phantomJS从1.9x升级到2.x;)

在您试图运行phantomJS以连接到远程服务器的机器上,运行“openssl密码”。将列出的密码复制并粘贴到--ssl密码=”“命令行选项。这会告诉连接的web服务器哪些密码可用于与客户端通信。如果您没有设置您自己机器上可用的密码,它可以使用您机器不理解的任何密码,即默认的现代浏览器所使用的密码。谢谢,这也解决了我的问题。在我的例子中,我并没有在浏览器上得到证书错误,所以它非常混乱,但我确实做了详细的卷曲,并注意到一个不起作用的是使用通配符证书(即:CN=*.example.com)。如果phantomjs能够返回详细的原因来解释失败的原因,那就太好了。神圣的猴子们。我希望SSL错误得到解释,只有堆栈溢出和粉色独角兽帮助我找到了根本原因。谢谢,伙计,这是在帮助人们。也许PhantomJS需要一个更新,用另一个命令行参数提供详细的SSL错误。我知道SSL错误信息在Qt中是可用的,但大多数时候人们只是抑制错误,而没有显式地处理它们。我知道我在游戏中迟到了,但我发现添加opt
var page = webpage.create();
page.customHeaders = {
    "Connection": "keep-alive"
};