Excel VBA - Web Scraping - Innerer Text der HTML-Tabellenzelle
Ich versuche, ein Makro zu erstellen, um den Status einer Frachtlieferung anhand der Sendungsnummer im Internet zu überprüfen. Ich verwende die XML-HTTP-Methode, bin aber neu im VBA-Web-Scraping. Ich habe versucht, den Wert mithilfe der GetValuebyID, Tag, Class zu ermitteln, ohne Erfolg.
Die hervorgehobene Zeile ist die, aus der der Wert extrahiert werden soll. [Die 10 von 10 gelieferten Werten müssen extrahiert werden] [1]
So weit bin ich mit dem Code gekommen.
Sub FlightStat()
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim AllTables As IHTMLElementCollection
Dim MainTable As IHTMLTable
XMLReq.Open "GET", "https://www.unitedcargo.com/OurNetwork/TrackingCargo1512/Tracking.jsp?id=10205436&pfx=016", False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
Set AllTables = HTMLDoc.getElementsByTagID("dispTable0")
End Sub
Ich wäre dankbar, wenn mir jemand helfen könnte, den Wert "10 von 10 geliefert" zu extrahieren [1]: https://i.stack.imgur.com/xcOAZ.png
Antworten
Ok, wie ich in meinem Kommentar geschrieben habe. Sie können den Status mit dem IE kratzen.
Bitte beachten Sie: Im folgenden Code ist kein Timeout integriert, wenn der dynamische Inhalt nicht geladen werden kann. Es wird auch nicht überprüft, ob die in der URL übergebene Nummer korrekt ist.
Sub FlightStat()
Dim url As String
Dim ie As Object
Dim nodeTable As Object
'You can handle the parameters id and pfx in a loop to scrape dynamic numbers
url = "https://www.unitedcargo.com/OurNetwork/TrackingCargo1512/Tracking.jsp?id=10205436&pfx=016"
'Initialize Internet Explorer, set visibility,
'call URL and wait until page is fully loaded
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.navigate url
Do Until ie.readyState = 4: DoEvents: Loop
'Wait to load dynamic content after IE reports it's ready
'We can do that in a loop to match the point the information is available
Do
On Error Resume Next
Set nodeTable = ie.document.getElementByID("dispTable0")
On Error GoTo 0
Loop Until Not nodeTable Is Nothing
'Get the status from the table
MsgBox Trim(nodeTable.getElementsByTagName("li")(2).innertext)
'Clean up
ie.Quit
Set ie = Nothing
Set nodeTable = Nothing
End Sub