A System.Windows.Forms.HtmlDocument (in VB.NET) kein mshtml.HtmlDocument (in VBA). Ohne den relevanten Code zu sehen, kann ich nicht sicher sein, dass Sie nicht mit dem ersteren gelandet sind.
Anstatt zusätzliche Schritte zu durchlaufen, um letzteres zu erhalten, können Sie Ihre eigene Methode zum Abrufen von Elementen mit einem bestimmten Klassennamen schreiben, z.
Public Class Form1
Dim wb As WebBrowser
Function GetElementsHavingClassName(doc As HtmlDocument, className As String) As List(Of HtmlElement)
Dim elems As New List(Of HtmlElement)
For Each elem As HtmlElement In doc.All
Dim classes = elem.GetAttribute("className")
If classes.Split(" "c).Any(Function(c) c = className) Then
elems.Add(elem)
End If
Next
Return elems
End Function
Sub ExtractElements(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
Dim wb = DirectCast(sender, WebBrowser)
Dim flintstones = GetElementsHavingClassName(wb.Document, "flintstone")
If flintstones.Count > 0 Then
For Each fs In flintstones
' do something with the element
TextBox1.AppendText(fs.InnerText & vbCrLf)
Next
Else
TextBox1.Text = "Not found."
End If
End Sub
Sub DoStuff()
If wb Is Nothing Then
wb = New WebBrowser
End If
RemoveHandler wb.DocumentCompleted, AddressOf ExtractElements ' don't leave any old ones lying around
AddHandler wb.DocumentCompleted, AddressOf ExtractElements
Dim loc = "file:///c:\temp\somehtml.html"
Try
wb.Navigate(loc)
Catch ex As Exception
'TODO: handle the problem gracefully.
MsgBox(ex.Message)
End Try
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DoStuff()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If wb IsNot Nothing Then
RemoveHandler wb.DocumentCompleted, AddressOf ExtractElements
wb.Dispose()
End If
End Sub
End Class
Welche angesichts der HTML
<!DOCTYPE html>
<html>
<head><title></title></head>
<body>
<div class="fred flintstone">Fred</div>
<div class="wilma flintstone">Wilma</div>
<div class="not-a-flintstone">Barney</div>
</body>
</html>
Ausgänge
Fred
Wilma
@ TnTinMin Ich sehe IHMTLDocument6 oder 7 als Option nicht in Visual Studio. Es scheint nur zu IHTMLDocument5 zu gehen. Wenn ich es jedoch in VBA anschaue, zeigt es IHMTLDocument6 und IHMTLDocument7. – Devan382
Hast du gelesen, ** verstanden ** und die Antwort implementiert, auf die ich hingewiesen habe? Sie müssen eine Interop-Assembly basierend auf der Typbibliothek für die aktuelle Version von MsHtml erstellen, die auf Ihrem Computer installiert ist, und dann auf diese Interop-Bibliothek verweisen. nicht der im GAC. – TnTinMn
Entschuldigung, ich habe missverstanden, was du zuerst gesagt hast. Ich habe gerade getan, was es in dem Link gesagt hat und es funktioniert jetzt. Vielen Dank! – Devan382