104

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を始めたばかりで、この問題を進めていなくても、遊ぶのをやめるのはあまりにも良いと思います。

4

12 に答える 12

154

Fred と Cameron Tinker の回答を試してみましたが、 --ssl-protocol=anyオプションだけが役立つようです。

phantomjs --ssl-protocol=any test.js

--ssl-protocol=anyまた、暗号化を使用しているため、使用する方がはるかに安全であると思います--ignore-ssl-errors=trueが、悪意のあるものを含むすべてのsslエラーを無視します.

于 2014-07-10T14:24:22.553 に答える
123

この問題は、SSL 証明書のエラーが原因である可能性が最も高いです。--ignore-ssl-errors=yesオプションを指定して phantomjs を起動すると、SSL エラーが発生しなかった場合と同様に、ページの読み込みが続行されます。

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

SSL 証明書が正しく実装されていない、または有効期限が切れているなどの問題を抱えている Web サイトをいくつか見てきました。 html . これが役立つことを願っています。

于 2012-08-31T17:53:08.460 に答える
71

2014 年 10 月 16 日の時点で、PhantomJS はデフォルトで SSLv3 を使用して HTTPS 接続を開くことに注意してください。最近発表された POODLE 脆弱性により、多くのサーバーが SSLv3 サポートを無効にしています。

これを回避するには、PhantomJS を次のように実行できる必要があります。

phantomjs --ssl-protocol=tlsv1

うまくいけば、PhantomJS がすぐに更新されて、SSLv3 の代わりに TLSv1 がデフォルトになります。

于 2014-10-17T04:00:05.287 に答える
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>
于 2015-04-07T17:02:16.100 に答える
0

どうshebangですか?

phantomjsシバンを使用してスクリプトを実行している場合は、次のシバン行を使用します

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

// ... rest of your script

上記の回答のいずれかを使用してください。--ignore-ssl-errors=yesループバック Web サーバーの自己署名証明書を検証することは無関係なので、個人的には気に入っています。

于 2016-02-17T07:49:42.210 に答える
0

ここでの他の答えはどれも私を助けませんでした。私が作業していた特定のサイトが、HTTP ヘッダーにこだわりすぎた可能性があります。これがうまくいきました:

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

PhantomJS が "Keep-Alive" (大文字) を使用していて、接続が維持されていないことがわかりました。:)

于 2017-12-09T20:12:04.793 に答える