Excel VBA - Web Scraping - Innerer Text der HTML-Tabellenzelle

Sep 04 2020

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

1 Zwenn Sep 04 2020 at 11:58

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