【问题标题】:Using MSHTML in VB.Net to parse HTML在 VB.Net 中使用 MSHTML 解析 HTML
【发布时间】:2011-09-07 23:08:59
【问题描述】:

想知道是否有人可以在这方面给我一些指导。我花了相当多的时间在上面,但似乎没有得到任何结果:

我有一个隐藏字段,我试图从 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

【问题讨论】:

    标签: wpf vb.net mshtml


    【解决方案1】:

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

    这会被渲染为&lt;input type="hidden"&gt;,所以你需要使用allElements.tags("input"),然后找到具体隐藏的那个。 id 属性可能不会以 hidField 结尾 - 这取决于它所在的容器控件以及嵌套级别。

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

    【讨论】:

    • 好的,有道理。我按照您的建议做了,最后在该行出现异常,我猜这是我对 MSHTML 做的不对:无法将类型为“System.__ComObject”的 COM 对象转换为接口类型“mshtml.IHTMLInputElement” '。此操作失败,因为 IID 为“{3050F5D2-98B5-11CF-BB82-00AA00BDCE0B}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
    • 我可以试试 HTML Agility Pack。
    【解决方案2】:

    我使用 MSHTML 已经有一段时间了,但如果我没记错的话,你需要使用类似的东西 htmlDocument.getElementById('hidField')

    【讨论】:

    • 嗯...我在其他地方也看到了该方法,但它在 mshtml.IHTMLDocument2 对象上不可用。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多