23

C# HttpWebRequest を使用して Web ページのデータを取得しています。問題は、ページがロードされた後に一部のデータが javascript/ajax を使用して更新され、応答文字列で取得されないことです。ページ内のすべてのスクリプトの実行が完了するまで webrequest を待機させる方法はありますか?

ありがとう

アミット

4

7 に答える 7

16

単なるアイデアですが、.netにブラウザにあるかのようにWebページをロードさせる方法があります。System.Windows.Formsを使用します。

WebページをWebBrowserコントロールにロードできます

WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()

これにより、おそらくpre ajax DOMが提供されますが、最初にajaxを実行させる方法があるかもしれません。

于 2009-02-05T16:16:12.710 に答える
10

あなたの質問を正しく解釈すれば、あなたの問題に対する簡単な解決策はありません。

サーバーから HTML をスクレイピングしていますが、C# コードは実際の Web ブラウザーではないため、クライアント スクリプトを実行しません。

この方法では、取得した HTML に含まれていない情報にアクセスできません。

編集:元の Web サイトからのこれらの AJAX 呼び出しがどれほど複雑かはわかりませんが、IE 用の Firebug または Fiddler を使用して、C# アプリケーションでもこれらの AJAX 呼び出しを呼び出すために要求がどのように行われるかを確認できます。したがって、必要な情報を追加できます。しかし、それは理論上の解決策にすぎません。

于 2009-02-05T14:16:32.767 に答える
4

Web ブラウザーで Web ページを開くと、JavaScript を実行し、ページで使用される追加のリソース (画像、スクリプトなど) をダウンロードするのはブラウザーです。HttpWebRequest 自体はこれを実行せず、要求したページの html のみをダウンロードします。単独で javascript/ajax コードを実行することはありません。

于 2009-02-05T14:16:46.040 に答える
4

HttpWebRequest を使用してページをダウンロードし、ソース コードで関連する ajax 情報をプログラムで検索してから、新しい HttpWebRequest を使用してそのデータを取得します。

于 2010-07-22T12:13:17.430 に答える
3

HttpWebRequest は Web ブラウザーをエミュレートしません。指定したリソースをダウンロードするだけです。これは、JavaScript ファイルを実行したりダウンロードしたりしないことを意味します。

FireBug のようなものを使用して、JavaScript を介して取り込まれるデータの URL を取得し、HttpWebRequest をその URL に向ける必要があります。

于 2009-02-05T14:18:53.183 に答える
1

HttpWebRequestページのダウンロードに使用します。ソース コードで関連する AJAX 情報を検索し、newHttpWebRequestを使用してそのデータを取得します。

于 2010-12-24T12:05:39.730 に答える