Problem mit auslesen von Links

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

    Problem mit auslesen von Links

    Hallo Leute

    ich hab ein Problem mit dem auslesen von Links: Die Schleife wird zwar Problemlos durchgelaufen aber es wird dann immer nur der erste Link eingefügt.
    Ich habe das mal am beispiel Lokalisten gemacht. Der erste Link ist allerdings einer, der auf eine CSS-Datei verweist
    Das wäre der Tag:
    <link rel="stylesheet" type="text/css" href="/css/loki-def.css;jsessionid=B6AFABB16E92743F75A8BB07263B0F14.s50n1s2?v=201010281801" />

    der wird leider ausgelesen, obwohl ich eigentlich nur a-Tags auslesen möchte. (vll liegt hier der fehler, was ich auch stark vermute aber ich weiß nicht was da falsch ist :( )

    In die Listbox wird dan auch einwandfrei der Link eingefügt: = /css/loki-def.css;jsessionid=B6AFABB16E92743F75A8BB07263B0F14.s50n1s2?v=201010281801

    VB.NET-Quellcode

    1. Dim i As Integer = 5 ' WebBrowser1.Document.Links.Count()
    2. Dim addresse As String = WebBrowser1.DocumentStream.ToString
    3. RichTextBox2.Clear()
    4. RichTextBox2.Text = WebBrowser1.DocumentText
    5. For j As Integer = 0 To i - 1
    6. Dim match As Match = Regex.Match(RichTextBox2.Text, "\<a(.*?)\>")
    7. Dim Text As String = match.Groups(1).Value
    8. ListBox1.Items.Add(getLinks(Text))
    9. RichTextBox2.Text.Replace(getLinks(Text), "###########################Test##########################")
    10. Next


    VB.NET-Quellcode

    1. Function getLinks(ByVal Inhalt As String) As String
    2. Dim match As Match = Regex.Match(Inhalt, "\ href=" & Chr(34) & "(.*?)\" & Chr(34))
    3. Dim Link As String = match.Groups(1).Value
    4. Return Link
    5. End Function
    Wenn man sowieso mit dem WebBrowser Control arbeitet statt mit WebRequest / WebClient, so sind die Methoden des HTMLDocuments oft einfacher als das Arbeiten mit Regular Expressions.

    Folgender Code gibt alle Links einer Webseite aus, die sich innerhalb eines anchor-Tags (<a>) befinden:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim WithEvents wb As New WebBrowser
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. ' navigieren
    5. wb.Navigate("http://www.vb-paradise.de")
    6. ' abwarten
    7. While wb.ReadyState <> WebBrowserReadyState.Complete
    8. Application.DoEvents()
    9. End While
    10. ' alle links auslesen
    11. For Each link As HtmlElement In wb.Document.Links
    12. ' nur anchor tags berücksichtigen
    13. If link.TagName = "A" Then
    14. ' URL aus href holen und ausgeben
    15. Trace.WriteLine(link.GetAttribute("href"))
    16. End If
    17. Next
    18. End Sub
    19. End Class


    Das Abwarten per Readystate-Abfrage ist hier nur ein Beispiel, sauberer ist es natürlich über das Document.Completed Event