Как получить значение ‘href’ без идентификатора VB

#.net #vb.net #winforms #webbrowser-control

#.net #vb.net #winforms #веб-браузер-управление

Вопрос:

Я знаю, что это глупый вопрос, но мне трудно с этим справиться. Я хочу получить значение ‘href’ без идентификатора, но я не могу.

Вот HTML

 <p class="CLASS">
    <a href="URL" target="TARGET">
        <img src="IMGURL" title="TITLE" border="BORDER">
    </a>
</p>
  

Вот что я использую (это не работает):

 For Each WPE As HtmlElement In WebBrowser1.Document.GetElementsByTagName("a")
    If WPE.GetAttribute("target").Equals("TARGET") Then
        HREFVALUE = WPE.Getattribute("href")
        Exit For
    End If
Next
  

Итак, как получить значение ‘href’?

Ответ №1:

Ваш код работает правильно. Но вы не получили ожидаемого результата, потому что, вероятно, выполнили код в неправильном месте. Код должен быть запущен после завершения документа. Хорошим способом узнать, что документ завершен, является DocumentCompleted событие WebBrowser элемента управления:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.WebBrowser1.Navigate("d:file.html")
End Sub
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As _
    WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

    Dim tag = Me.WebBrowser1.Document.GetElementsByTagName("a").Cast(Of HtmlElement) _
                .Where(Function(a) a.GetAttribute("target") = "TARGET") _
                .FirstOrDefault()
    Dim href = tag.GetAttribute("href")
End Sub
  

Я использовал linq в приведенном выше коде только для целей обучения. Ваш собственный код также работает нормально.

Комментарии:

1. Спасибо за ответ. Хотя в большинстве случаев это работает, иногда код под ним повторяется несколько раз, что влияет на результаты и запускает случайный запуск некоторого кода.