0

AJAX関数によって更新された後、webBrowserの更新されたhtmlを取得する必要があります

たとえば、「page1.asp」に移動すると、「page1.asp」には別のページからコンテンツをロードする iframe が含まれています。また、xx 秒後に送信ボタンを表示する jQoery 関数もあります。

私の質問は、webBrowser から最新の html を取得するにはどうすればよいですか?

アップデートを試みましたが、うまくいきませんでした。

webBrowser.Update();
4

2 に答える 2

1

目標を達成するためには、次のガイドラインに正しく従う必要がある、少しトリッキーな質問です。

  1. フォームにタイマーを作成する必要があります。tick でバインドし、約 500 ミリ秒の間隔を与えます。
  2. timer_tick イベントに次のコードを記述します。

    if (browser.ReadyState == WebBrowserReadyState.Complete)

  3. 準備完了状態になったら、ajax リクエストの完了後に更新されると思われる html 要素を探します。

この方法で、任意の要素をチェックできます。

        HtmlElementCollection forms = browser.Document.GetElementsByTagName("form");
        HtmlElement form = null;
        foreach (HtmlElement el in forms)
        {
            string name = el.GetAttribute("name");
            if (name == "DATA")
            {
                form = el;
                break;
            }
        }

4) 要素を取得したら、作業を続行できます。

更新:これは、必要に応じて拡張できるタイマーティックコーディングですTimer1.Inverval = 100(100ミリ秒)を設定していることを確認してください

    private void Timer1_Tick(sender, args) 
    {
        Application.DoEvents();

// make sure your are pulling right element id
        HtmlElement cTag = webBrowser.Document.GetElementById("myelement");         

        if(cTag != null) // if elemnt is found than its fine. 
        { 
            cTag.SetAttribute("value", "Eugene");
            Timer1.Enabled = false;
        } 
        else 
        {
// dont worry, the ajax request is still in progress... just wait on it and move on for the next tick. 
        }
        Application.DoEvents(); // you can call it at the end too.
    }
于 2013-03-08T20:51:46.007 に答える
0

を使用しWebBrowser.DocumentText()ます。

MSDN から

このプロパティには、別のドキュメントが要求された場合でも、現在のドキュメントのテキストが含まれます。このプロパティの値を設定し、すぐに再度取得する場合、WebBrowser コントロールが新しいコンテンツを読み込む時間がない場合、取得される値は設定された値とは異なる場合があります。DocumentCompleted イベント ハンドラーで新しい値を取得できます。または、DocumentText プロパティが最初に設定した値を返すまでループ内で Thread.Sleep メソッドを呼び出して、ドキュメントが読み込まれるまでスレッドをブロックすることもできます。

DocumentCompleted() イベント ハンドラー内で DocumentText() の呼び出しを実行してみてください。iFrame がこのイベントをスローしないためにそれができない場合は、タイマーを設定して、数秒ごとにテキストを取得します。

于 2013-03-08T20:36:08.083 に答える