31

アプリの Web ショットを作成するスクリプトをセットアップしました。それは完全に実行され、壊れた URL の画像に遭遇するまではすべて問題ありません:

 "<img src='http://testserver.our.intranet/fetch/image/373e8fd2339696e2feeb680b765d626e' />"

以下を使用して 6 秒後にスクリプトを中断することができました。

しかし、ネットワーク要求を無視して (AKAから画像を取り出してDOM)、画像なしで (または、画像のない画像を挿入して) サムの作成に進むことは可能ですか?

var page = require('webpage').create(),
    system = require('system'),
    address, output, size;

if (system.args.length < 3 || system.args.length > 5) {
    phantom.exit(1);
} else {
    address = system.args[1];
    output  = system.args[2];
    page.viewportSize = { width: 640, height: 640 };
    page.zoomFactor = 0.75;
    page.clipRect = { top: 10, left: 0, width: 640, height: 490 };
    try{
        page.open(address, function (status) {
            if (status !== 'success') {
                console.log('Unable to load the address!');
                phantom.exit();
            } else {
                window.setTimeout(function () {
                    page.render(output);
                    phantom.exit();
                }, 200);
            }
        });    
    } finally{
        setTimeout(function() {
            console.log("Max execution time " + Math.round(6000) + " seconds exceeded");
            phantom.exit(1);
        }, 6000);
    }
}
4

1 に答える 1

62

PhantomJS 1.9 ではresourceTimeout、リクエストがキャンセルされるまでの時間を制御する新しい設定 が導入されました。それに加えて、onResourceTimeoutリクエストがタイムアウトした場合にトリガーされるイベントがあります。

上記のすべてを示すコード スニペットを次に示します。

var page = require('webpage').create();  
page.settings.resourceTimeout = 5000; // 5 seconds
page.onResourceTimeout = function(e) {
  console.log(e.errorCode);   // it'll probably be 408 
  console.log(e.errorString); // it'll probably be 'Network timeout on resource'
  console.log(e.url);         // the url whose request timed out
  phantom.exit(1);
};

page.open('http://...', function (status) {
...
}

残念ながら、これらのオプションは現在十分に文書化されていません。それらを見つけるために、 GitHubの議論PhantomJS のソース コードを調べる必要がありました。

于 2013-09-16T21:54:50.517 に答える