16

PhantomJSを使用してWebページのスクリーンショットを撮ろうとしています。具体的には、この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がアップしています。

4

3 に答える 3

24

さて、私の場合、ページはいくつかの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をロードし、コンソールログを確認して、到達不能な要求を長時間待っていることがわかりました。

これをバイパスするには-同じloadspeed.jsファイルに以下を追加して、タイムアウトを減らします。

page.settings.resourceTimeout = 3000; //in milliseconds

その後、物事は非常に迅速でした。お役に立てれば

于 2013-11-13T06:28:08.520 に答える
9

はい、これは正常です。レンダリングしようとしても、PhantonJSは、DOM全体がロードされたことを示すためにpage.open、イベントがイベントを発生させるのを待機します。load

espn.comシステムにローカルでロードするとどうなるか見てみましょう。DOMContentLoadedが完了するまでに約2秒かかり、その後、readyイベントが発生するまでに約7秒かかります。

ここに画像の説明を入力してください

于 2012-10-30T17:22:08.020 に答える
2

私は次のことがうまくいくとは思っていませんでしたが、私にとっては(Windowsでは)うまくいきました:

InternetExplorer>インターネットオプション>接続>LAN設定を開き、「設定の自動検出」を無効にします

元の投稿:https ://plus.google.com/+MatthiasG%C3%B6tzke/posts/9v9BMCJj2k6

于 2015-08-05T22:09:51.747 に答える