web-dev-qa-db-ja.com

Phantom.jsはすべてのAJAXをキャプチャしますか?

大量のAJAXを備えたバックボーンアプリがあります。 (各ページの読み込みは5-6 ajax呼び出しになります)これらのビュー内に多くのビューと内部ビューがあるため、

phantom.jsを実行すると、最終的なHTML結果を取得できますか?

最終結果は、すべてのajax呼び出しが実行された後にユーザーに表示されるものです。

25
TIMEX

PhamtonJsは、JavaScript APIを備えたヘッドレスWebKitです。 PhatomJsは、ページをクロールするときに、画像、js、cssなどのすべての依存リクエストをダウンロードします。JSおよびajax呼び出しも実行します。ただし、保留中のリクエストがない場合ではなく、ページの読み込みが完了したときにonLoadedコールバックが呼び出されます。したがって、これにはトリックを使用する必要があります。

問題を解決するには2つの方法があります。

  • 「何か」がページ(要素)で効果的に変更されるまで待ちます。最良の例は waitFor.js です。
  • リクエストが受信されなくなるまで数秒待ちます。
35
Cybermaxs

Phantom.jsはページでJavaScriptを実行できるので、これは機能するはずです。 Phantom.jsを使用してクローラーにJavascriptサイトのナイスバージョンを提供する方法を説明する article があります。

この スレッドの説明 のように、Phantom.jsにajax呼び出しを完了するのに十分な時間を与えてください。

11
sbridges

$ .activeをwaitFor.jsスクリプトと共に使用して、サーバーへのアクティブな接続の数を返すことができます。すべてのリクエストが完了するまで、接続が0になるまで待つ必要があります。

詳細: jQuery.active function

1
Naga Kiran

WebサイトのJavaScriptコードにアクセスできる場合は、waitFor()以外の方法で、ajaxリクエストを同期させることができると思います。それは時々より簡単でより正確です。

0
iplus26