PhantomJSを使用してWebページのスクリーンショットを撮ろうとしています。具体的には、 this の例からespn.com
をキャプチャする例を使用しています。私のコードは次のようになります:
var page = new WebPage();
page.open('http://www.espn.com', function (status) {
page.render('fb.png');
phantom.exit();
});
次に、ターミナルまたはコマンドプロンプトを使用してPhantomJSディレクトリに移動し、次のコマンドを実行します。
phantomjs shotty.js
すべてが正常に実行されますが、出力イメージが完了するまでに6〜8秒かかります。それは正常ですか? 1秒以内に完了するようにこれを達成するためのより速い方法はありますか?
CentOSとWindows7を使用しています。どちらのボックスにも8GBのRAM、3.2 GHzのCPUが搭載されており、speedtest.netで22Mbp/sがダウンして1Mbp/sがアップしています。
はい、これは正常です。レンダリングしようとしても、PhantonJSはpage.open
イベントがload
イベントを発生させて、DOM全体がロードされたことを示します。
システムにローカルにespn.com
をロードするとどうなるか見てみましょう。 DOMContentLoadedが完了するまでに約2秒かかり、次にready
イベントが発生するまでに約7秒かかります。
さて、私の場合、ページはいくつかのGETリクエストを待っていて、リクエストのサーバーに到達できず、長い間待ち続けました。リモートデバッガオプションを使用した場合にのみ理解できました。
phantomjs --remote-debugger-port=9000 loadspeed.js <some_url>
そしてloadspeed.jsファイル内
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
};
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
};
次に、任意のWebkitブラウザー(safari/chrome)にlocalhost:9000をロードし、コンソールログを見て、到達不能な要求を長時間待っていることがわかりました。
これをバイパスするには-タイムアウトを減らします:
page.settings.resourceTimeout = 3000; //in milliseconds
その後、物事は非常に迅速でした。お役に立てれば
私は次のことがうまくいくとは思いませんでしたが、私にとっては(Windowsでは)うまくいきました:
internetExplorer>インターネットオプション>接続> LAN設定を開き、「設定の自動検出」を無効にします
元の投稿: https://plus.google.com/+MatthiasG%C3%B6tzke/posts/9v9BMCJj2k6