次のコードを使用して、phantomjs を使用してページのスクリーンショットを取得しています。ほとんどのページで問題なく機能しますが、一部の URL で「操作がキャンセルされました」というエラーが表示されます。
var page = require('webpage').create(),
system = require('system');
page.viewportSize = {
width: 1366,
height: 800
};
page.onConsoleMessage = function(msg) {
console.log("CONSOLE MESSAGE:" + msg);
};
page.onResourceError = function(resourceError) {
console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};
page.open(<URL>, function(status) {
if (status !== 'success') {
console.log('FAIL to load the address');
phantom.exit();
} else {
page.render("3.png");
phantom.exit();
}
});
console.log("opening");
URL が機能しない例としてはhttp://india.gov.in、http://timesofindia.indiatimes.com/などがあります。
URLへindia.gov.inの最初のリクエスト: http://india.gov.in/が途中で再送信され、その直前に既存のすべての操作がキャンセルされます。他のいくつかの URL でも同様のことが起こります。
ページは更新されていますか? はいの場合、どのように処理しますか?
phantomjsでリダイレクト/リロードを追跡するには?
さらに調査すると、さらに興味深い統計が得られました。india.gov.in の間、phantomjs はある時点でリクエストの送信と応答の受信を開始しました (リクエスト ID: を作成した後118)。保留中のリクエストの数は でした37。ファントムは保留中のリクエストを「キャンセル」し、ページの読み込みを最初から開始しました。リクエストの送信を再開しました。
リクエスト ID156の後、保留中のリクエストの数が再び増加しました37(今回は 1 つのリクエストに対してのみ応答を受け取りました)。そのため、保留中のすべてのリクエストが再び「キャンセル」され、再び開始されます。
リクエスト ID194の後、保留中のリクエストの数が再び増加した37ため、再度キャンセルして再起動しました。
リクエスト ID232の後、保留中のリクエストの数は再び増加しました37が、今回は再起動せず、キャンセルされました。
ファントムが処理できる保留中のリクエストの数に制限はありますか?
サンクス!!
ノート!ノート!注!:箱から出してすぐにphantomjs 2で動作しました。しかし、それはまだ開発中であるため、本番環境では使用できません。1.9.8 と 2.0 の間のどのアップデートで修正されたのか、誰にもわかりませんか? おそらく、1.9.8 のソースにその変更をインポートしてビルドすることができます。