Использование MSHTML в VB.Net для разбора HTML - PullRequest
1 голос
/ 03 июня 2011

Интересно, может ли кто-нибудь дать мне какое-то руководство по этому вопросу?Я потратил на это немало времени и, похоже, никуда не денусь:

У меня есть скрытое поле, которое я пытаюсь разобрать в документе HTML в VB.Net.Я использую элемент управления System.Windows.Controls.WebBrowser в приложении WPF и обрабатываю событие 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") возвращает ноль.Что-то не так с библиотекой 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 ]

1 голос
/ 03 июня 2011

Вам нужно искать отображаемый тег, а не значение на стороне сервера.

Это будет отображено как <input type="hidden">, поэтому вам нужно использовать allElements.tags("input"), а затем найти конкретный скрытый. Атрибут id может не заканчиваться как hidField - это зависит от того, в каком контейнере он находится и в каком уровне вложенности.

Я предлагаю использовать HTML Agilty Pack для синтаксического анализа HTML и поиска элемента - он должен быть проще в использовании, чем MSHTML.

0 голосов
/ 03 июня 2011

Прошло много времени с тех пор, как я использовал MSHTML, но если я правильно помню, вам нужно использовать что-то вроде htmlDocument.getElementById('hidField')

...