0

フレームを使用したサイト表示ページである webbrowser control を使用してタスクを自動化しています。私の問題は、WebブラウザーコントロールにWebページが正しくロードされているのを見ることができるポイントに到達することですが、コードに入ってhtmlを見ると何も表示されません。

ここでも他の例を見てきましたが、それらのすべてがすべてのブラウザー html を返すわけではありません。

これを使用して得られるもの:

                    HtmlWindow frame = webBrowser1.Document.Window.Frames[1];
                    string str = frame.Document.Body.OuterHtml;

ただ:

SRCタグなどの属性を持つメイン フレーム タグ は、これを処理する方法はありますか?Web ページが完全に読み込まれていることがわかるのに、なぜ html が表示されないのでしょうか?インターネット エクスプローラーでそれを行うと、ページのソースがロードされたら、なぜここにいないのですか?

追加情報

ページには 2 つのフレームがあります。

私はこれを上記のように使用します:

HtmlWindow フレーム = webBrowser1.Document.Window.Frames[0];

        string str = frame.Document.Body.OuterHtml;

そして、最初のフレームでは正しい HTMl を取得しますが、2 番目のフレームでは次のようにしか表示されません。

<FRAMESET frameSpacing=1 border=1 borderColor=#ffffff frameBorder=0 rows=29,*><FRAME title="Edit Search" marginHeight=0 src="http://web2.westlaw.com/result/dctopnavigation.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 name=TopNav marginWidth=0 scrolling=no><FRAME title="Main Document" marginHeight=0 src="http://web2.westlaw.com/result/dccontent.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 borderColor=#ffffff name=content marginWidth=0><NOFRAMES></NOFRAMES></FRAMESET>

アップデート

フレームの 2 つの URL は次のとおりです。

htmlが表示されるFrame1

http://web2.westlaw.com/nav/NavBar.aspx?RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

HTMLが表示されないFrame2:

http://web2.westlaw.com/result/result.aspx?RP=/Search/default.wl&action=Search&CFID=1&DB=AK%2DCS&EQ=search&fmqv=s&Method=TNC&origin=Search&Query=%22LAND+USE%22&RLT=CLID%5FQRYRLT302424536122&RLTDB=CLID%5FDB6558157526122&Service=Search&SRCH=TRUE&SSKey=CLID%5FSSSA648523536122&RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

そして、html が取得されない 2 番目のフレームのプロパティは、下の図にあります。

ここに画像の説明を入力

ありがとうございました

4

4 に答える 4

1

上記の質問の解決策にお金を払いましたが、100% 動作します。

私がしたことは、以下のこの関数を使用することでした。それは、私が見つけられなかった探していたタグへのカウントを返しました:S..これを使用して、以下にリストされた関数を呼び出します:

FillFrame(webBrowser1.Document.Window.Frames);



private void FillFrame(HtmlWindowCollection hwc)
        {


            if (hwc == null) return;
            foreach (HtmlWindow hw in hwc)
            {
                HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
                if (getSpanid != null)
                {

                    doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();

                    break;
                }

                if (hw.Frames.Count > 0) FillFrame(hw.Frames);
            }


        }

それが人々を助けることを願っています。

ありがとうございました

于 2012-02-12T20:37:22.440 に答える
0

これは問題なく動作します...すべての内部要素を持つ BODY 要素を取得します。

フォームコードのどこかに:

wb.Url = new Uri("http://stackoverflow.com");
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);

そして、ここに wbDocumentCompleted があります:

void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var yourBodyHtml = wb.Document.Body.OuterHtml;
}

wbはSystem.Windows.Forms.WebBrowser

アップデート:

ドキュメントと同じように、内容を確認した時点で 2 番目のフレームが読み込まれていないと思います...このリンクから解決策を試すことができます。フレームのコンテンツを表示するには、フレームがロードされるまで待つ必要があります。

于 2012-02-11T17:10:40.230 に答える
0

HTMLを取得するには、次のようにする必要があります。

        WebClient client = new WebClient();
        string html = client.DownloadString(@"http://stackoverflow.com");

これはもちろん一例です。アドレスを変更できます。ところで、System.Net を使用する必要があります。

于 2012-02-11T14:00:48.520 に答える
0

最も可能性の高い理由は、フレーム インデックス 0 がメイン/親ページと同じドメイン名を持ち、フレーム インデックス 1 が異なるドメイン名を持つことです。私は正しいですか?

これにより、クロスフレームのセキュリティ問題が発生し、WB コントロールは単にあなたを高く乾燥させたままにし、一体何が間違っていたのかを教えず、オブジェクト、プロパティ、およびデータを空のままにします (「変数なし」と表示されます)オブジェクトを展開しようとするとウィンドウを監視します)。

この状況でアクセスできるのは、ほとんどの URL と iFrame プロパティだけで、iFrame 内には何もありません。

もちろん、クロスフレームのセキュリティ問題を克服する方法はありますが、それらは WebBrowser コントロールに組み込まれておらず、使用している WB コントロール (.NET バージョンまたは .NET 以前など) に応じて、外部ソリューションです。バージョン)。

問題を正しく特定できたかどうかをお知らせください。もしそうであれば、WB コントロールの設定とインスタンスに合わせた解決策について教えてほしい場合はお知らせください。

アップデート: HTML を取得するために .getElementByTagName("HTML")(0).outerHTML を実行していることに気付きました。これを行う必要があるのは、ドキュメント オブジェクトまたは .body オブジェクトでこれを呼び出すことだけです。 . MyDoc.Body.innerHTML は、必要なコンテンツを取得する必要があります。また、関連する場合に備えて、これらのドキュメント内に追加の iFrame があることに注意してください。この 2 つの URL を含むメイン ドキュメントの URL を教えていただけますか? また、DomElement を使用している理由はわかりませんが、キャスト先のネイティブ オブジェクト、IHTMLDocument2 またはウォッチ ウィンドウに表示されるオブジェクト (IHTMLFrameElement だと思います) にキャストする必要があります (正しく思い出せば、しかし、一度見れば私の言いたいことがわかるでしょう)。XML オブジェクトを使用しようとしている場合は、これが、HTML コンテンツを取得できない理由である可能性があります。オブジェクト宣言とキャストがある場合はそれを変更し、試してみて、お知らせください :)。今、私も興味があります:)。

于 2012-02-12T12:14:45.137 に答える