2

問題は次のとおりです。

WebBrowser.OnNavigateComplete2イベントに反応してドキュメントのコンテンツを解析し、正確な情報を取得するフックが IE にあります。

そのドキュメントにはフレームが含まれているため、HTMLDocument.frames. それぞれについて、document.body.outerHTML プロパティを調べてコンテンツを確認します。

問題は、探している文字列がそこに表示されないのに対し、フィナーレ ページに表示されることです。それで、私は間違った場所を探していますか?ページが完全にロードされたときに表示される場合は、ある時点でダウンロードされていますよね? しかし、どのオブジェクトを見ればよいのでしょうか?

ところで、それが重要かどうかはわかりませんが、検索しているページは ASP.NET アプリケーションからのものです。

public void OnNavigateComplete2(object pDisp, ref object url)
{
    document = (HTMLDocument)webBrowser.Document;

    mshtml.FramesCollection frames = document.frames;
    for (int i = 0; i < frames.length; i++)
    {
        object refIdx = i;
        IHTMLWindow2 frame = (IHTMLWindow2)frames.item(ref refIdx);
        string frameContent = frame.document.body.outerHTML;
    }
}

助けてくれてありがとう。


@ramsこのイベントはページごとに何度も起動されるため、探しているものをキャッチできなくても、フレームが読み込まれるたびに発生すると考えました。そうでない場合、フレームのコンテンツをキャッチするイベントは何ですか?

私がやりたいのは、正確なフレームに関する正確な情報を検出して保存することです。後で、何らかのユーザー アクションによってトリガーされた Web ページが読み込まれ、フレームの解析から取得した情報が必要になります。

4

3 に答える 3

2

コンテンツを探しているフレームの名前/IDを知っていますか?もしそうなら、あなたのnavigateComplete2イベントで、あなたは次のようなフレームへの参照を得ることができますか?

iFrame frm = document.frames(<your frame id>);

int readyState=0;

while(frm.readystate !=4){
// do nothing. be careful to not create an endless loop
}

if(frm.readyState==4){
   // get your content now
}

HTH

于 2008-12-04T17:55:43.250 に答える
0

文字列が表示されない理由は、フレームのためです。Web ブラウザー コントロールは、メイン ドキュメントを読み込んだ後、ドキュメント ナビゲート完了イベントを発生させます。この時点では、フレームはまだソースを要求していません。ドキュメントが Web ブラウザー コントロールによって解析された後、フレーム ソースの要求が発行され、ダウンロードされます。

あなたが達成しようとしていることを説明していただけますか?

于 2008-12-01T19:59:29.553 に答える
0

ある種のスレッドを使用していますか?ブラウザを別のスレッドで実行すると、本当に混乱します。STAThread で実行して、正しい結果が得られるかどうかを確認してください。

于 2008-11-27T17:23:08.387 に答える