4

次のコードを使用して、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.inhttp://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 のソースにその変更をインポートしてビルドすることができます。

4

2 に答える 2

0

この問題を参照してください。

https://github.com/ariya/phantomjs/issues/10522

これは、bind() の信頼できるサポートが不足しているためです。phantomjs 1.9.7 でこれに対処する試みがありましたが、バージョン 2.0 まで完全には解決されませんでした。

修正はメインブランチで機能しています。唯一の解決策は、リリース前の 2.0 を自分でコンパイルし、リリース時に公式の 2.0 にアップグレードすることです。

于 2014-11-18T20:30:40.017 に答える
0

私も同じ問題を抱えていましたが、ついにその理由がわかりました。

ディスクキャッシュを有効にしておく必要があります。

phantomjs のディスクキャッシュにはデッドロックのバグがあります。同じURLで何度も仕事を続けることで、このバグを使い果たしました。キャッシュ ディレクトリを削除すれば、すべて問題ありません。

于 2016-08-17T04:18:46.090 に答える