2012-02-29 46 views
1

我只花了2個小時試圖找出我的代碼出了什麼問題。基本上,這裏是我做過什麼:WebBrowser.DocumentText

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

我只是運行此命令之前渲染WebBrowser控件的頁面,所以我知道肯定文本是存在的,但它仍然返回false。

我做了一些調試,發現browser.DocumentText包含了一些奇怪的HTML形式。

現在我可以遍歷文檔中的標籤並從那裏獲取文本,但有沒有辦法通過查看HTML?

+1

有關您正在使用哪種編碼環境的任何提示? C#,winforms? – ChrisBD 2012-02-29 15:21:04

+0

c#winforms,對不起。 – TheGateKeeper 2012-02-29 15:27:43

+2

你能告訴我們有問題的HTML和你正在尋找的實際字符串嗎? – Ryan 2012-02-29 15:30:27

回答

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循環,請勿使用兩次,使用j作爲它們中的一個:)。

讓我知道這是否回答你的問題,或者如果有更多的事情可以幫助你解決問題。

+0

嗨,我確實已經在我的項目的其他部分使用了它,但是覺得這部分是不必要的,因爲我只想檢查文檔中的字符串。 – TheGateKeeper 2012-03-09 11:40:39

+0

我標記你是努力的正確答案;) – TheGateKeeper 2012-03-09 11:40:52

+0

@TheGateKeeper謝謝你的朋友,也投了你的問題,因爲它提出了一個重要的觀點,大多數人似乎都在爲此而懊惱。儘管你可能會更好地獲取.body的引用,然後做innerhtml或outerhtml,因爲有時候文檔文本可能是不可預知的,我以前見過一些人遇到過文檔文本問題,希望這有幫助, – 2012-03-10 10:47:36

相關問題