1

ブラウザコントロール付きのフォームがあります。(レジストリエディタで値を設定したため、このコントロールはIE9を使用します)

このWebブラウザは特定のURLに移動し、HTMLページのすべてのフィールドに入力して送信すると、結果ページが表示されます。私の問題は、このreslutページが完全にロードまたは完了したときに知りたいので、情報を取得できることです。WebBroswer_DocumentCompletedイベントを使用します。これは、最初のページでは正常に機能しますが、結果ページが読み込まれる前にトリガーされるため、結果ページでは機能しません。

結果ページ内のdivタグを確認する他の解決策を試しました(このタグは結果ページが完全に読み込まれた場合にのみ表示されます)。これは機能しますが、常に機能するとは限りません。

私のコード:

private void WebBroswer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    { 

        HtmlElementCollection elc3 = this.BotBrowser.Document.GetElementsByTagName("div");
        foreach (HtmlElement el in elc3)
        {
            if (el.GetAttribute("id").Equals("Summary_Views")) //this determine i am at the result page
            {
               // fetch the result
            }
        }}

そのdividは「Summary_Views」です。研究目的のBLASTツールとデータベースWebサイト専用のWebサイトのリンクをオンデマンドで提供できます。

4

3 に答える 3

1

フレームとIFrameにより、このイベントが複数回発生します。この回答を確認してください:
HTML-すべてのフレームがいつロードされたかを知るにはどうすればよいですか?

またはこの答え:
C#でWebBrowserコントロールDocumentCompletedイベントを使用する方法は?

またはmsのkb記事: http ://support.microsoft.com/kb/180366

于 2012-09-25T21:27:55.827 に答える
1

フレームがあるか知っていますか?もしそうなら、そう言ってください、そうすれば人々はそれを手伝うことができます。そうでなければ、そう言うので、人々は代替案を提供することができます。

私の推測では、コンテンツはJavaScriptによって生成されています。その場合、JavaScriptが実行される前にドキュメントが完成し、JavaScriptが実行されるまで何とか待つ必要があります。解決策はWebページによって異なります。したがって、診断目的で複数のドキュメントの完了を処理し、どれが必要かを知る方法があるかどうかを判断する必要がある場合があります。

于 2012-09-25T22:33:29.487 に答える
1

ついに私は自分の問題を解決しました。ツールボックスからタイマーコントロールを配置し、その時間間隔を200msに設定し、Autoresetプロパティをfalseに設定しました。このDivがロードされているかどうかを200msごとにチェックするコードを持つtickイベントを設定しました。その後、Autoresetプロパティがtrueに設定されます。このソリューションは完全に機能しています:)

于 2012-10-03T21:44:31.710 に答える