PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic -> html Links filtern


Geldmann3
2010-08-28, 00:11:50
Ich habe eine ListBox1, einen Webbrowser1 und einen Button1. Beim Klick auf den Button soll die Seite die der Webbrowser anzeigt nach html Links durchsucht werden. Die html Links sollen dann in der List Box angezeigt werden.
Nun dachte ich mir, weil meine Visual Basic Kenntnisse nicht sehr groß sind, ich befrage mal Google. Ich kam auf folgende (http://www.vbarchiv.net/tipps/tipp_1033-alle-url-links-einer-html-seite-auslesen-ii.html) Seite.
Ich habe gleich mal versucht den Code zu testen, habe ihn dann so eingefügt.
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Long
Dim sLink As String

' alle URLs ermitteln und in die ListBox übertragen
ListBox1.Clear()
With WebBrowser1.Document.All
For i = 0 To .Tags("A").Length
sLink = Trim$(.Tags("A")(i).href
If sLink <> "" And LCase$(Left$(sLink, 7)) <> "mailto:" Then
ListBox1.additem(sLink)
End If

If sLink <> "" Then
ListBox1.additem(sLink)
End If
Next i
End With
End Sub
End Class

List1 habe ich durch ListBox1 ersetzt, weil diese bei mir so heisst. Allerdings bekomme ich nun die Fehlermeldung angezeigt.
"Clear" ist kein Member von "System.Windows.Forms.ListBox".

Könnte mir vielleicht jemand sagen, wie das zu beheben ist?

Jonny1983
2010-08-28, 01:15:19
ListBox1.Items.Clear()

Geldmann3
2010-08-28, 03:34:50
Super funktioniert!
Jetzt sieht der Code so aus:
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Long
Dim sLink As String

' alle URLs ermitteln und in die ListBox übertragen
ListBox1.Items.Clear()
With WebBrowser1.Document.All
For i = 0 To .Tags("A").Length
sLink = Trim$(.Tags("A")(i).href
If sLink <> "" And LCase$(Left$(sLink, 7)) <> "mailto:" Then
ListBox1.additem(sLink)
End If

If sLink <> "" Then
ListBox1.additem(sLink)
End If
Next i
End With
End Sub
End Class

Allerdings kommt jetzt die Fehlermeldung:
"Tags" ist kein Member von "System.Windows.Forms.HtmlElementCollection".

robobimbo
2010-08-28, 09:04:47
In C# würd ich die Schleife wie folgt schreiben:


foreach (HtmlElement link in this.webBrowser1.Document.GetElementsByTagName("a")) {
...bla
}

Jonny1983
2010-08-28, 14:28:44
Außerdem heißt es
ListBox1.Items.Add(sLink)

Zumindest so verschwinden alle Fehlermeldungen:

Public Class Form1

Private Sub Button1_Click() Handles Button1.Click
Dim i As Long
Dim sLink As String

' alle URLs ermitteln und in die ListBox übertragen
ListBox1.Items.Clear()
With WebBrowser1.Document.All
For i = 0 To Tag("A").Length
sLink = Trim$(Tag("A")(i).href)
If sLink <> "" And LCase$(Left.ToString(sLink)) <> "mailto:" Then
ListBox1.Items.Add(sLink)
End If
If sLink <> "" Then
ListBox1.Items.Add(sLink)
End If
Next i
End With
End Sub
End Class


Du hast dir ein Beispiel rausgesucht das für VB6 gut ist, benutzen tust du aber selbst VB 2005/2008 nicht wahr?

Geldmann3
2010-08-28, 16:23:12
Du hast dir ein Beispiel rausgesucht das für VB6 gut ist, benutzen tust du aber selbst VB 2005/2008 nicht wahr?
Aha, so groß sind da also die Differenzen. Ich nutze es mit der 2010er Version...
edit: Jetzt zeigt mir Visual Basic vor dem Testen keine Fehlermeldung mehr an, wenn ich das ganze allerdings teste und auf den Button klicke kommt.
System.NullReferenceException wurde nicht behandelt.

Jonny1983
2010-08-28, 19:41:26
Da ich mit "WebBrowser1" noch nie was gemacht habe, kann ich dir da kaum weiterhelfen, aber zumindest Abstürze kann man beseitigen


Try
'Programmcode
Catch ex As Exception
'wenn Fehler eintrifft, dann den Code an dieser Stelle ausführen
End Try



Public Class Form1

Private Sub Button1_Click() Handles Button1.Click
Dim i As Long
Dim sLink As String

' alle URLs ermitteln und in die ListBox übertragen
ListBox1.Items.Clear()
Try
With WebBrowser1.Document.All
For i = 0 To Tag("A").Length
sLink = Trim$(Tag("A")(i).href)
If sLink <> "" And LCase$(Left.ToString(sLink)) <> "mailto:" Then
ListBox1.Items.Add(sLink)
End If
If sLink <> "" Then
ListBox1.Items.Add(sLink)
End If
Next i
End With
Catch ex As Exception
MsgBox("irgendwas klappte nicht")
End Try
End Sub
End Class

Geldmann3
2010-08-29, 00:06:29
Danke,

Was ist wohl passiert? Klar irgendwas klappte nicht...

PatkIllA
2010-08-29, 08:49:09
an welcher stelle tritt denn die Exception auf?

Geldmann3
2010-08-29, 14:20:19
So wie ich das sehe, im rot markierten Bereich
Public Class Form1

Private Sub Button1_Click() Handles Button1.Click
Dim i As Long
Dim sLink As String

' alle URLs ermitteln und in die ListBox übertragen
ListBox1.Items.Clear()
With WebBrowser1.Document.All
For i = 0 To Tag("A").Length
sLink = Trim$(Tag("A")(i).href)
If sLink <> "" And LCase$(Left.ToString(sLink)) <> "mailto:" Then
ListBox1.Items.Add(sLink)
End If
If sLink <> "" Then
ListBox1.Items.Add(sLink)
End If
Next i
End With
End Sub
End Class

Direktfenster:
Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in Microsoft.VisualBasic.dll aufgetreten.

robobimbo
2010-08-30, 13:00:10
Du musst das Ergebnis von Tag("A") zwischenspeichern und dann auf Null testen, kann ja sein das in dem HTML Dokument keine Links drinnen sind.

Der Rückgabetyp ist eine HtmlElementCollection soweit ich mich richtig erinnere