2011-06-03 161 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