2012-02-29 4 views
1

私は自分のコードで何が間違っているかを調べるのに2時間を費やしました。WebBrowser.DocumentText

 if (browser.DocumentText.Contains("Something")) 
     { 
      [do somwthing] 
     } 

は、私は、このコマンドを実行する前に、WebBrowserコントロールでページをレンダリングし、私はテキストがあることを確認するために知っているが、それはまだfalseを返します:基本的に、ここで私がやったことです。

私はいくつかのデバッグを行い、browser.DocumentTextにHTMLの奇妙な形式が含まれていることがわかりました。

文書のラベルを繰り返してそこからテキストを取得することはできますが、HTMLを見てそれを行う方法はありますか?

+1

使用しているコーディング環境に関するヒントはありますか? C#、winforms? – ChrisBD

+0

C#winforms、申し訳ありません。 – TheGateKeeper

+2

あなたが探している問題のあるHTMLと実際の文字列を表示できますか? – Ryan

答えて

1

.DocumentTextを使用せずにこれらの文字列をすべて解析する必要がありません。erk。

wbMainがWebBrowser1コントロールの場合は、次の操作を行います。

最初に要素への参照を取得する必要があります。ページの最初の<A>リンクにアクセスしたい場合は、必要に応じてすべてループすることができます。

これはVBにありますが、C#では同じ種類のものですが、構文が異なります。すべての属性による

Dim i As Integer 
Dim aElement As HTMLAnchorElement = wbMain.Document.All.getElementByTagName("A")(0) 

For i = 0 To aElement.attributes.length - 1 
    MsgBox aElement.attributes.item(i).name & "=" & aElement.attributes.item(i).value 
Next i 

この意志ループとname=value形式でMSGBOXに表示します。

名前(属性名)で検索する場合は、aElement.getAttribute("target")を使用して呼び出すだけで、リンクからターゲット属性の値を取得できます。

正しいオブジェクト/要素があることを確認したい場合は、aElement.outerHTMLを実行して、その要素の完全なHTMLコードを取得してください。

私はpre.NETバージョンを使用しているので、宣言をHTMLAnchorElementからIHTMLAnchorElementに変更することができます。問題がある場合はもちろん、IHTMLElementを使用してページ上のすべての要素を処理したい場合は、ページ上の最初の要素のwbMain.Document.All(0)、またはすべてを通過するための.All.length - 1までのループが必要です。 Forループをネストしている場合は、iを2回使用せず、そのうちの1つにはjを使用してください。

これがあなたの質問に答えるか、あなたの問題を解決するためにもっと私ができることがあれば教えてください。

+0

こんにちは、私はこのプロジェクトの他の部分でこれを使っていましたが、文書内の文字列をチェックしたいので、この部分では不必要でした。 – TheGateKeeper

+0

私は努力のための正解をあなたにマークしました;) – TheGateKeeper

+0

@TheGateKeeper大変お世話になりました。あなたはおそらく.bodyへの参照を取得し、innerhtmlやouterhtmlをやっている方が良いでしょう。文書のテキストが時々予測できないことがあるので、 –