在VB.Net中使用MSHTML来解析HTML

时间:2011-06-03 16:27:32

标签: wpf vb.net mshtml

想知道是否有人可以给我一些方向。我花了相当多的时间在上面,似乎没有任何进展:

我有一个隐藏的字段,我正在尝试从VB.Net中的HTML文档中解析。我在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

2 个答案:

答案 0 :(得分:1)

您需要查找呈现的标记,而不是服务器端值。

这将呈现为<input type="hidden">,因此您需要使用allElements.tags("input"),然后找到特定的隐藏版本。 id属性可能不会以hidField结尾 - 这取决于它所处的容器控制以及嵌套级别。

我建议使用HTML Agilty Pack来解析HTML并找到元素 - 它应该比MSHTML更容易使用。

答案 1 :(得分:0)

自从我使用MSHTML以来已经有一段时间了,但如果我没记错的话,你需要使用像 htmlDocument.getElementById('hidField')