read_transactions.webcrawler.amazon

author:

Tim Häberlein

version:

2.1

date:

26.10.2025

organisation:

TU Dresden, FZM

Attributes

end

Classes

AmazonCrawler

Crawler für Umsätze aus dem Zahlungsbereich von amazon.de.

Module Contents

class read_transactions.webcrawler.amazon.AmazonCrawler(otp_method: str | None = None, max_items_per_order: int = 5, title_max_chars: int = 40, *args, **kwargs)

Bases: read_transactions.webcrawler.WebCrawler

Crawler für Umsätze aus dem Zahlungsbereich von amazon.de.

Dieser Crawler automatisiert den Login-Flow (inkl. Passkey/WebAuthn-Abbruch und Umgang mit einem verdeckt eingeblendeten Passwortfeld), navigiert zur Zahlungs-/Transaktionsübersicht und extrahiert dort die sichtbaren Umsatz-Einträge (Datum, Beschreibung, Betrag). Die rohen Einträge werden im Anschluss mit den Standard-Helfern der Basisklasse normalisiert.

Wichtige Merkmale - Bricht ggf. angezeigte Passkey/WebAuthn-Dialoge zuverlässig ab und wechselt in die Passwort-Anmeldung. - Erkennt und bedient ein verdecktes Passwortfeld (setzt notfalls den Wert via JS). - Optionales 2FA-/OTP-Handling über _verify_identity() mit mehreren Eingabe-/Bezugsvarianten („prompt“, „env“, „file“, „totp“, „external“, „none“). - Scrollt die Zahlungsübersicht und liest alle sichtbaren Transaktionen in den Zeitraum ein.

Konfiguration (config.yaml) credentials.amazon.user Amazon-Login (E‑Mail). credentials.amazon.password Amazon-Passwort. urls.amazon.login Login-URL (robuster Fallback ist die längere OpenID-URL von Amazon). urls.amazon.transactions URL der Zahlungs-/Transaktionsübersicht.

Parameters (übernommen von WebCrawler)

output_path : str, optional Verzeichnis, in dem Ausgabedateien gespeichert werden (Standard: "out"). start_date : str | pandas.Timestamp | datetime.date | None, optional Startdatum (Format bei str: "DD.MM.YYYY"). Standard: heute. end_date : str | pandas.Timestamp | datetime.date | None, optional Enddatum (Format bei str: "DD.MM.YYYY"). Standard: heute minus 6 Monate. logging_level : str, optional Log-Level (z. B. "DEBUG", "INFO"). Standard: "INFO". logfile : str | None, optional Pfad zu einer Logdatei. Wenn gesetzt, wird File-Logging aktiviert. browser : str, optional Zu verwendender Browser (z. B. "edge" oder "chrome"). Standard: "edge". headless : bool, optional Headless-Modus aktivieren/deaktivieren. Standard: False. user_agent : str | None, optional Benutzerdefinierter User-Agent für den WebDriver.

opt_method : str | None, optional Bevorzugtes 2FA-Verfahren ("authenticator", "sms", "whatsapp", "call"). Standard: None (kein Wechsel, Standardverfahren verwenden). max_items_per_order : int, optional Maximale Anzahl Artikel-Titel pro Bestellung (Standard: 5). title_max_chars : int, optional Maximale Zeichenanzahl für den Verwendungszweck (Standard: 120).

driver
Type:

selenium.webdriver.Remote

otp_method = None
max_items_per_order
title_max_chars
login() None

Login inkl. Passkey-Abbruch, verdecktem Passwortfeld & 2FA-Verfahrenswechsel

_set_username_if_present(username: str) None

Setzt den Benutzernamen, falls das Feld sichtbar ist.

_fill_password_and_submit(password: str) None

Füllt das Passwortfeld und sendet das Formular ab.

_handle_2fa_if_present() None

Stellt OTP-Verfahren (optional) um & bestätigt Code (gem. amazon.md).

_wait_for_login(timeout: int = 120) bool

Wartet, bis der Login abgeschlossen ist (Bestellübersicht geladen).

Parameter:

timeout – Maximale Wartezeit in Sekunden.

download_data() None

Wird von Subklassen überschrieben – startet Download-Vorgang.

process_data(*args, **kwargs) None

Optional von Subklassen überschreiben – verarbeitet geladene Daten. Standardmäßig werden alle Dateien im temporären Download-Verzeichnis eingelesen und in ein einziges DataFrame zusammengeführt. Dabei wird die Funktion preprocess_data() für jedes DataFrame aufgerufen.

Im Anschluss wird self.data normalisiert.

Parameter:
  • read_temp_files (bool, optional) – Ob Dateien im temporären Download-Verzeichnis eingelesen werden sollen.

  • sep (str, optional) – Trennzeichen für CSV-Dateien. Standard ist ‚;‘.

Rückgabe:

None

_select_year(year: int) bool

Wählt das Jahr im Dropdown (select#time-filter).

_go_next_page() bool
_parse_orders_on_page(max_items: int = 10, max_item_chars: int = 30, order_year: int = 2025) List[Dict[str, Any]]

Parst alle Bestellungen auf der aktuellen Seite.

_parse_orders_on_page_by_dom(max_items: int = 10, max_item_chars: int = 30, order_year: int = 2025) List[Dict[str, Any]]

Parsed ausschließlich über den DOM alle Bestell-Karten der aktuellen Seite. Keine Nutzung von card.text oder Regex – nur gezielte DOM-Selektoren.

Erfasst je Karte:
  • Bestelldatum (Label → erstes folgendes Element)

  • Betrag/Summe (Label → erstes folgendes Element)

  • Bestellnummer (Label → erstes folgendes Element)

  • Lieferinfo (Knoten, der mit ‚Zugestellt‘/‘Geliefert‘ beginnt oder ‚Lieferung am‘ enthält)

  • Versandadresse (Label → folgender Block)

  • Items/Verwendungszweck (Produktlinks zu /dp/ oder /gp/product/, dedupliziert, limitiert)

Rückgabe:

Eine Liste von Datensätzen (je Karte ein Dict).

Rückgabetyp:

list[dict]

static _coerce_date_string_de(s: str, default_year: int | None = None) str

Turns ‚24. Oktober 2025‘ or ‚25. Oktober‘ into ‚24.10.2025‘. If year is missing, uses default_year or current year.

read_transactions.webcrawler.amazon.end