2011-06-03 166 views
1

想知道是否有人可以給我一些指導。我花了相當多的時間在它上面,似乎沒有得到任何地方:在VB.Net中使用MSHTML來解析HTML

我有一個隱藏的字段,我試圖解析出一個HTML文檔在VB.Net。我在WPF應用程序中使用System.Windows.Controls.WebBrowser控件並處理LoadCompleted事件。裏面的LoadCompleted事件處理程序我做這樣的事情:

Dim htmlDocument As mshtml.IHTMLDocument2 = Me.WebBrowser.Document 
Dim allElements As mshtml.IHTMLElementCollection = htmlDocument.body.all 
Dim hiddenField As mshtml.IHTMLInputElement = allElements.tags("hidField") 

,我試圖訪問的隱藏字段在我的.aspx文件中聲明爲這樣:

<asp:HiddenField runat="server" ID="hidField"/> 

的問題是,這allElements.tags("hidField")返回null。我在做什麼錯誤的mshtml庫?我沒有太多的經驗,並收集到我需要做這樣的事情來找到我隱藏的領域元素。讓我知道你是否需要更多信息。我在這裏先向您的幫助表示感謝。

編輯
這裏的是有興趣的人我最後工作的解決方案:

Dim htmlDocument As mshtml.IHTMLDocument2 = Me.WebBrowser.Document 
    Dim allElements As mshtml.IHTMLElementCollection = htmlDocument.body.all 
    Dim allInputs As mshtml.IHTMLElementCollection = allElements.tags("input") 

    For Each element As mshtml.IHTMLInputElement In allInputs 
     If element.type = "hidden" And element.name.Contains("hidField") Then 
      MessageBox.Show(element.value) 
     End If 
    Next 

回答

1

您需要查找呈現的標記,而不是服務器端的值。

這會呈現爲<input type="hidden">,所以您需要使用allElements.tags("input"),然後找到具體的隱藏的一個。 id屬性可能不會以hidField結尾 - 這取決於它所處的容器控件以及嵌套級別。

我建議使用HTML Agilty Pack解析HTML並找到元素 - 它應該比MSHTML更易於使用。

+0

好的,這是有道理的。我做了你的建議,並最終得到了該行的異常,我猜是我不正確使用MSHTML的東西:無法將類型爲「System .__ ComObject」的COM對象轉換爲接口類型爲「mshtml.IHTMLInputElement 」。此操作失敗,因爲IIC「{3050F5D2-98B5-11CF-BB82-00AA00BDCE0B}」接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:沒有此類接口支持(異常來自HRESULT:0x80004002(E_NOINTERFACE)) 。 – Tom 2011-06-03 16:54:16

+0

我可以試試HTML敏捷包。 – Tom 2011-06-03 16:55:19

0

它一直以來我用MSHTML,但如果我沒有記錯的話,你需要使用類似 htmlDocument.getElementById('hidField')

一會兒
+0

嗯...我看到在其他地方建議的方法,但它在mshtml.IHTMLDocument2對象上不可用。 – Tom 2011-06-03 16:57:46