Loadspeed.jsの例に基づいた次のコードを使用して、httpサーバー認証も必要なhttps://サイトを開きます。
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();
});
}
常にページを読み込めない。ここで何が間違っているのでしょうか?セキュリティで保護されたサイトは別の方法で処理されますか?ただし、ブラウザからサイトに正常にアクセスできます。
私はちょうど今Phantomから始めており、この問題を前に進めていませんが、遊んでいるのをやめるにはあまりにも良いと思います。
フレッドとキャメロンティンカーの答えを試しましたが、-ssl-protocol = anyオプションのみが私を助けているようです:
phantomjs --ssl-protocol=any test.js
また、暗号化を使用しているので--ssl-protocol=any
を使用する方がずっと安全だと思いますが、--ignore-ssl-errors=true
は悪意のあるものを含むすべてのsslエラーを無視します(duh)。
この問題は、おそらくSSL証明書エラーが原因です。 -ignore-ssl-errors = yesオプションを指定してphantomjsを起動すると、SSLがなかった場合と同様にページの読み込みに進む必要がありますエラー:
phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]
SSL証明書を誤って実装したり、有効期限が切れたりするなどの問題を抱えているWebサイトがいくつかあります。phantomjsのコマンドラインオプションの完全なリストは、こちらから入手できます。 http://phantomjs.org/api/ command-line.html 。これがお役に立てば幸いです。
2014-10-16現在、PhantomJSはデフォルトでSSLv3を使用してHTTPS接続を開くことに注意してください。 POODLEの脆弱性 が最近発表されたため、多くのサーバーがSSLv3サポートを無効にしています。
それを回避するには、PhantomJSを次のコマンドで実行できる必要があります。
phantomjs --ssl-protocol=tlsv1
願わくば、TLSv1をSSLv3ではなくデフォルトにするために、PhantomJSがすぐに更新されることを願っています。
同じ問題が発生しました...
-ignore-ssl-errors = yesはそれを修正するのに十分ではなく、さらに2つのことをしなければなりませんでした。
1)ユーザーエージェントの変更
2)すべてのssl-protocolsを試しましたが、問題のページのtlsv1のみが機能しました
お役に立てれば...
同じ問題が発生しました(casperjs 1.1.0-beta3/phantomjs 1.9.7)。 --ignore-ssl-errors = yesおよび--ssl-protocol = tlsv1を使用して解決しました。オプションの1つだけを使用しても、解決できませんでした。
受けていた
PhantomJSからのSSLコンテキストの作成エラー」(CentOS 6.6で実行)
ソースからビルドすることで修正されました。作成したphantomjsを使用することを忘れないでください。 (お持ちの場合は/ usr/local/bin/phantomjsの代わりに)
Sudo yum -y install gcc gcc-c++ make flex bison gperf Ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh
cd bin/
./phantomjs <your JS file>
SahiでPhantomjsを使用している場合、--ignore-ssl-errors
オプションをbrowser_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>
昨日SSL Handshake Failed
を取得していました。 phantomJSオプションの多くの組み合わせ(--ignore-ssl-errors=yes
など)を試しましたが、どれも機能しませんでした。
PhantomJS 2.1.1へのアップグレードにより修正されました。
https://Gist.github.com/julionc/747662 でphantomJSインストール手順を使用し、phantomJSバージョンを2.1.1に変更しました。
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サーバーの自己署名証明書を検証することは無関係だからです。
Phantomjsを実行してリモートサーバーに接続しようとしているマシンで、「openssl ciphers」を実行します。リストされた暗号をコピーして、-ssl-ciphers = ""コマンドラインオプションに貼り付けます。これにより、接続するWebサーバーに、クライアントとの通信に使用できる暗号がわかります。自分のマシンで使用可能なものを設定しない場合、デフォルトの最新のブラウザがデフォルト設定に使用することをマシンが理解していない暗号を使用できます。
ここでの他の答えはどれも私を助けませんでした。私が働いていた特定のサイトが、HTTPヘッダーにこだわりすぎていた可能性があります。これがうまくいったものです:
var page = webpage.create();
page.customHeaders = {
"Connection": "keep-alive"
};
PhantomJSが「キープアライブ」(大文字)を使用しており、接続が維持されていないことがわかりました。 :)