Rechnungen automatisch von DHL Geschäftskundenportal downloaden

Du hast eine Idee für ein Projekt?
Antworten
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

Hallo Zusammen,

Ich bin neu im Forum, bin selbstständig und möchte ein paar Prozesse automatisieren.
Beispielsweise muss ich regelmäßig vom DHL Portal die aktuellen Rechnungen herunterladen.
Ich habe bereits Selenium und Phyton auf dem Laptop und mir von der KI einen Code programmieren lassen.
Es klappt fast alles, aber erkennt den Download Button nicht. Ich lade später ein paar Infos noch hoch.
Sirius3
User
Beiträge: 18384
Registriert: Sonntag 21. Oktober 2012, 17:20

Eigentlich sollte man nicht versuchen, irgendwas von einer Webseite herauszusuchen, sondern man benutzt die offizielle API: https://developer.dhl.com/
Benutzeravatar
sparrow
User
Beiträge: 4647
Registriert: Freitag 17. April 2009, 10:28

Was übrigens ganz wunderbar klappt, wenn man nicht vergisst, dass man alle 6 Monate einmal ohne API ins Portal einloggen muss.
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

ich wollt gerade den Code hochladen, ich schau mir das mal an. Danke!
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time

# ---------------------------------------------------
# KONFIGURATION
# ---------------------------------------------------
USERNAME = "Username"
PASSWORD = "Passwort"

DOWNLOAD_DIR = r"C:\Users\ch-ha\Documents\Belegtransfer\364307-56696\Rechnungseingang"

LOGIN_URL = " https://sso.geschaeftskunden.dhl.de/aut ... ethod=S256"
RECHNUNGEN_URL = " https://geschaeftskunden.dhl.de/billing ... e/overview"

# ---------------------------------------------------
# SELENIUM EINRICHTEN
# ---------------------------------------------------
chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
"download.default_directory": DOWNLOAD_DIR,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True
})

driver = webdriver.Chrome(options=chrome_options)

# ---------------------------------------------------
# LOGIN
# ---------------------------------------------------
driver.get(LOGIN_URL)
time.sleep(3)

driver.find_element(By.ID, "username").send_keys(USERNAME)
driver.find_element(By.ID, "password").send_keys(PASSWORD)
driver.find_element(By.ID, "kc-login").click()

time.sleep(5)

# ---------------------------------------------------
# ZU DEN RECHNUNGEN NAVIGIEREN
# ---------------------------------------------------
driver.get(RECHNUNGEN_URL)
time.sleep(5)

# ---------------------------------------------------
# FALLS DIE RECHNUNGEN IN EINEM IFRAME SIND → WECHSELN
# ---------------------------------------------------
iframes = driver.find_elements(By.TAG_NAME, "iframe")
if len(iframes) > 0:
driver.switch_to.frame(iframes[0])
time.sleep(2)

# ---------------------------------------------------
# ALLE BUTTONS "Rechnung herunterladen" FINDEN
# ---------------------------------------------------
download_buttons = driver.find_elements(By.XPATH,
"//*[contains(text(), 'Rechnung herunterladen')]"
)

print(f"Gefundene Rechnungen: {len(download_buttons)}")

# ---------------------------------------------------
# ALLE BUTTONS ANKLICKEN
# ---------------------------------------------------
for btn in download_buttons:
try:
btn.click()
print("Download gestartet...")
time.sleep(2)
except Exception as e:
print("Fehler beim Download:", e)

print("Alle sichtbaren Rechnungen wurden heruntergeladen.")

driver.quit()
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

https://i.ibb.co/gbXVqZtM/Screenshot-20 ... 230013.jpg

API für Rechnungsdownload gibt es nicht. Es ist ein Button, wenn ich den anklicke, downloaded er die Rechnung
in meinen Download Ordner.

Wenn es einfacheres gibt als Python, bin ich offen. Die Rechnungen müssten dann ja automatisch auch verschoben werden
in meinen Rechnungseingangordner, oder idealerweise automatisch per Mail verschickt werden an Datev.

Es gibt Drittanbieterlösungen für zweistellige monatliche Beiträge, aber ich glaube daran, das man das auch selber hinbekommt.
Benutzeravatar
sparrow
User
Beiträge: 4647
Registriert: Freitag 17. April 2009, 10:28

@ch049: Hast du eigentlich eine Ahnung, was genau Selenium macht und was dieses "find_elemets" exakt tut? Oder hast du jetzt gehofft, dass die KI dir das Verständnis abnimmt? Ich frage das deshalb, weil ich ehrlich gesgt nicht weiß, wie ein Screenshot bei der Hilfestellung helfen soll. Und da du das denkst, muss ich davon ausgehen, dass du nicht weißt, was du tust.

Um Python zu lernen bietet sich das offzielle Python Tutorial in der Dokumentation an. Das richtet sich allerdings explizit an Menschen, die bereits Programmieren könen und neu in Python sind.
Für deine Aufgabe brauchst du auch das Verständnis, was HTML ist und wie es funktioniert.

Meine Motivation Menschen zu helfen, die sich von LLMs irgendwas basteln lassen, dann an ihre Grenzen stoßen und hoffen, dass der Rest von Menschen kostenlos beigetragen wird, ist quasi nicht vorhanden.

Ansonsten empfehle ich bei DHL einfach e-Billing zu machen und die Rechnungen per Mail senden zu lassen.
Benutzeravatar
__blackjack__
User
Beiträge: 14360
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ch049: Was spricht denn gegen die API?
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

__blackjack__ hat geschrieben: Mittwoch 25. März 2026, 11:57 @ch049: Was spricht denn gegen die API?
ich habe keine API dazu gefunden.
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

sparrow hat geschrieben: Dienstag 24. März 2026, 23:31 @ch049: Hast du eigentlich eine Ahnung, was genau Selenium macht und was dieses "find_elemets" exakt tut? Oder hast du jetzt gehofft, dass die KI dir das Verständnis abnimmt? Ich frage das deshalb, weil ich ehrlich gesgt nicht weiß, wie ein Screenshot bei der Hilfestellung helfen soll. Und da du das denkst, muss ich davon ausgehen, dass du nicht weißt, was du tust.

Um Python zu lernen bietet sich das offzielle Python Tutorial in der Dokumentation an. Das richtet sich allerdings explizit an Menschen, die bereits Programmieren könen und neu in Python sind.
Für deine Aufgabe brauchst du auch das Verständnis, was HTML ist und wie es funktioniert.

Meine Motivation Menschen zu helfen, die sich von LLMs irgendwas basteln lassen, dann an ihre Grenzen stoßen und hoffen, dass der Rest von Menschen kostenlos beigetragen wird, ist quasi nicht vorhanden.

Ansonsten empfehle ich bei DHL einfach e-Billing zu machen und die Rechnungen per Mail senden zu lassen.
E-Billing gilt für DHL Express Kunden, jedoch nicht für den normalen Geschäftskundenbereich.
Die KI hat mir das Verständnis abgenommen, da ich nicht die Zeit habe, mich tiefer einzudenken und es dann in keinem Verhältnis steht.
Aber ich bin bereit dafür auch zu zahlen, wenn mir Jemand das so einrichtet das es funktioniert. Das ist mir das Expertenwissen auch wert.

Also wenn mir Jemand eine gute Lösung anbietet für mein Problem, bitte PN an mich.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1336
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Chat GPT sagt:

Hinweise aus offizieller Doku
In den technischen Manuals (z. B. Freight APIs) tauchen Rechnungsreferenzen (INV) nur als Metadaten auf, die „auf der Rechnung erscheinen können“
Es gibt keinen Endpoint wie „/invoices“ oder „/billing“ in den öffentlich dokumentierten APIs

👉 Das bestätigt:
Die APIs sind operativ (Shipping/Tracking), nicht kaufmännisch (Billing/Rechnungen).



Wundert mich sehr. UPS scheint ähnlich zu sein. Ich habe aber auch keine Lust danach zu suchen, da ich das selbst nicht brauche. Ich frage morgen mal unsere Sekretärin, wie wir das handhaben.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
ch049
User
Beiträge: 7
Registriert: Dienstag 24. März 2026, 09:46

Danke! Eventuell nutze ich invoicefetcher für solche Möglichkeiten.
Antworten