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.
Rechnungen automatisch von DHL Geschäftskundenportal downloaden
Eigentlich sollte man nicht versuchen, irgendwas von einer Webseite herauszusuchen, sondern man benutzt die offizielle API: https://developer.dhl.com/
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()
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()
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.
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.
@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.
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.
- __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
ich habe keine API dazu gefunden.__blackjack__ hat geschrieben: Mittwoch 25. März 2026, 11:57 @ch049: Was spricht denn gegen die API?
E-Billing gilt für DHL Express Kunden, jedoch nicht für den normalen Geschäftskundenbereich.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.
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.
- 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.
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
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
