PhantomJS无法打开HTTPS站点
我使用以下基于loadspeed.js示例的代码打开一个https://站点,该站点也需要http服务器身份验证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) {
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"
};