Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

DHL Tracking Status
#1
Hallo zusammen, habe folgendes Problem:

Eine Excel Liste mit DHL Express Tracking Nummern in Spalte L.

Nun möchte ich in Spalte N den Zustellstatus anzeigen lassen.

Ich habe das Ganze schon mit der Package Tracker API ausprobiert aber das funktioniert nur teilweise...

Ich habe ein Skript gefunden, zwar für den Zeitstempel der Zustellung aber ich denke für geübte Leute kein Problem das entsprechend umzuschreiben auf den LieferSTATUS:

Code:
Sub ZeitStempelDHL()



Const urlGrund As String = "https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?idc="

Dim urlSendungsNr As String

Dim url As String

Dim browser As Object

Dim knotenZeitStempel As Object

Dim zeitStempel As String

Dim letzteZeile As Long

Dim aktuelleZeile As Long



 'Letzte Zeile in Spalte A in der Tabelle, aus der das Makro gestartet wird

 letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

 

 'Alle Sendungsnummern ab Zeile 1 Durchgehen

 For aktuelleZeile = 1 To letzteZeile

   'URL zusammensetzen

   'Die Sendungsnummer kann für jeden Abruf in

   'einer Schleife aus der Tabelle geholt werden

   urlSendungsNr = ActiveSheet.Cells(aktuelleZeile, 1).Value

   url = urlGrund & urlSendungsNr

   

   'Internet Explorer initialisieren, Sichtbarkeit festlegen,

   'URL aufrufen und warten bis Seite vollständig geladen wurde

   Set browser = CreateObject("internetexplorer.application")

   browser.Visible = False

   browser.navigate url

   Do Until browser.ReadyState = 4: DoEvents: Loop

   'Manuelle Pause, damit die Seite komplett zur Verfügung steht

   Application.Wait (Now + TimeSerial(0, 0, 2))

   

   'HTML-Element mit Zeitstempel holen

   Set knotenZeitStempel = browser.document.getElementsByClassName("mm_deliveryTime")(0)

   

   If Not knotenZeitStempel Is Nothing Then

     'Wenn das HTML-Element vorliegt

     'Zeitstempel aus HTML-Element extrahieren

     zeitStempel = Trim(knotenZeitStempel.innertext)

   Else

     zeitStempel = "Es wurde kein Zeitstempel gefunden"

   End If

   

   'Aufräumen

   browser.Quit

   Set browser = Nothing

   Set knotenZeitStempel = Nothing

   

   'Zeitstempel eintragen

   ActiveSheet.Cells(aktuelleZeile, 2).Value = zeitStempel

 Next aktuelleZeile

End Sub

Vielen Dank schonmal! :)
Antworten Top
#2
Hallöchen,

schaue mal den Quelltext der Seite bzw. des Elementes mit dem Lieferstatus an. Den Namen nimmst Du und ersetzt damit im Code diesen Namen:
mm_deliveryTime
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo Ernie,

keine Ahnung woher die ganzen Leerzeilen kommen, aber das Script ist von mir. Was genau verstehst Du denn unter "Sendungsstatus"? Da steht ja der Sendungsverlauf, darüber ein Textfeld mit dem vermeintlichen "Sendungsstatus" und darüber noch der Absender des Pakets. Ich habe aber keine Ahnung, was da wo steht, wenn ein Paket noch unterwegs ist.

Viele Grüße,

Zwenn
Antworten Top
#4
Hallöchen,

bestimmt hier:

   
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Guten Morgen, bitte entschuldigt die verzögerte Antwort :)

Es geht hier um DHL Express Tracking

https://www.dhl.com/en/hidden/component_...7611408335&brand=DHL

zum Beispiel.

Hier würde ich gerne auf Abfrage das neuste (oberste) Ereignis anzeigen lassen.

Bei dem zuvor geposteten Skript bekomme ich übrigens beim Ausführen auch immer einen Fehler bei Internet Explorer command.

Run-time error '429' ActiveX component can't create object  (wenn ich auf Debug clicke bringt er mich zur InternexExplorer line)
Antworten Top
#6
Hallo Ernie,

das ist eine völlig andere Seite und die benötigt ein eigenes Script. Für jede Internetseite, von der man Daten auslesen möchte (Web Scraping), muss ein individuelles Script entwickelt werden, weil die zugrunde liegende Seitenstruktur einzigartig ist. Das "andere" DHL Script nutzt Dir hier also erstmal gar nix. Es funktioniert übrigens nicht mehr, weil die Seite seit der Erstellung des Scriptes auf dem DHL Server verändert wurde. In solchen Fällen muss so ein Script generell an die Änderungen der Seite angepasst werden.

Die Daten der von Dir verlinkten Seite können über ein JSON ausgelesen werden. Das hat unterschiedliche Vorteile:
  • Der IE als Schnittstelle wird nicht benötigt
  • Der Zugriff ist wesentlich schneller, weil er über xhr statt über den IE erfolgen kann (xhr = XML HTTP Request)
  • JSON ist ein Standard-Datenaustausch-Format, wie XML. Selbst wenn die Seite geändert wird, bleibt der reine Daten-Container JSON unverändert, solange keine Daten wegfallen oder hinzu kommen
So sieht das aus:
https://www.dhl.com/shipmentTracking?AWB=7611408335&countryCode=g0&languageCode=en&_=1612171227980

Sollte da nur unstrukturierter wilder Text mit noch wilderen Klammern zu sehen sein, kopieren, hier reiwerfen und auf Process klicken:
https://jsonformatter.curiousconcept.com/

Ich nehme an, die 7611408335 ist die Nummer, die Dir zur Verfügung steht, um so eine Abfrage auszulösen. Richtig?

Ich möchte von Dir jetzt eine Beispielmappe, in der Du die auszulesenden Datenfelder als Beispielergebnis einträgst. Insbesondere will ich auch wissen, wo Nummern wie JD014600008374261811 eingestragen werden sollen, wenn es mehrere davon gibt. Also nicht nur "1 Piece". Ferner will ich wissen wo die Nummern stehen, zu denen Du Daten abrufen willst.

Viele Grüße,

Zwenn
Antworten Top
#7
(01.02.2021, 10:44)Zwenn schrieb: Hallo Ernie,

das ist eine völlig andere Seite und die benötigt ein eigenes Script. Für jede Internetseite, von der man Daten auslesen möchte (Web Scraping), muss ein individuelles Script entwickelt werden, weil die zugrunde liegende Seitenstruktur einzigartig ist. Das "andere" DHL Script nutzt Dir hier also erstmal gar nix. Es funktioniert übrigens nicht mehr, weil die Seite seit der Erstellung des Scriptes auf dem DHL Server verändert wurde. In solchen Fällen muss so ein Script generell an die Änderungen der Seite angepasst werden.

Die Daten der von Dir verlinkten Seite können über ein JSON ausgelesen werden. Das hat unterschiedliche Vorteile:
  • Der IE als Schnittstelle wird nicht benötigt
  • Der Zugriff ist wesentlich schneller, weil er über xhr statt über den IE erfolgen kann (xhr = XML HTTP Request)
  • JSON ist ein Standard-Datenaustausch-Format, wie XML. Selbst wenn die Seite geändert wird, bleibt der reine Daten-Container JSON unverändert, solange keine Daten wegfallen oder hinzu kommen
So sieht das aus:
https://www.dhl.com/shipmentTracking?AWB=7611408335&countryCode=g0&languageCode=en&_=1612171227980

Sollte da nur unstrukturierter wilder Text mit noch wilderen Klammern zu sehen sein, kopieren, hier reiwerfen und auf Process klicken:
https://jsonformatter.curiousconcept.com/

Ich nehme an, die 7611408335 ist die Nummer, die Dir zur Verfügung steht, um so eine Abfrage auszulösen. Richtig?

Ich möchte von Dir jetzt eine Beispielmappe, in der Du die auszulesenden Datenfelder als Beispielergebnis einträgst. Insbesondere will ich auch wissen, wo Nummern wie JD014600008374261811 eingestragen werden sollen, wenn es mehrere davon gibt. Also nicht nur "1 Piece". Ferner will ich wissen wo die Nummern stehen, zu denen Du Daten abrufen willst.

Viele Grüße,

Zwenn

Hi, vielen Dank hierfür schonmal!

Ich habe mal auf deinen JSON Link geklickt, ohne den Formatter, hier finde ich den richtigen Wert bei:

results - 0 - checkpoints - 0 - description

Diesen Wert möchte ich in meiner Tabelle in Spalte N eintragen.

Der Wert für die Suche steht in Spalte L.

Die verschiedenen Nummern (JD0xxxxxxxxxxxx) müssen nirgends eingetragen werden auch wenn es hier mal mehr als 1 piece gibt da das alles unter die gleiche Waybill Nummer fällt.

Also eigentlich muss man nur irgendwo diesen Wert (results - 0 - checkpoints - 0 - description) von der JSON Datei auslesen und in die Spalte N schreiben Smile

Vielen Dank!

   
Antworten Top
#8
Hallöchen,

Zwenn schrieb
Zitat:Ich möchte von Dir jetzt eine Beispielmappe
(und kein Bild)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo,

zeitgleich habe ich das gefunden:

Code:
https://www.borncity.com/blog/2021/02/01/datenschutz-panne-bei-dhl/

Sorry, bei Deutschland und IT fällt mir immer "Neuland" ein.

mfg
Antworten Top
#10
(01.02.2021, 13:59)schauan schrieb: Hallöchen,

Zwenn schrieb
(und kein Bild)

Bittesehr :)


.xlsx   Beispiel.xlsx (Größe: 36,04 KB / Downloads: 4)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste