This commit is contained in:
2025-07-03 06:31:39 +00:00
parent 9f7985a1f2
commit 53a2485305

View File

@@ -73,7 +73,8 @@ class DealfrontScraper:
def login(self):
"""
Führt den Login-Prozess auf der Dealfront-Plattform durch.
Diese Version wartet explizit auf jedes Element, bevor interagiert wird.
Diese Version wartet explizit auf jedes Element, bevor interagiert wird,
und verwendet die verifizierten Selektoren.
"""
if not self.driver:
return False
@@ -87,8 +88,7 @@ class DealfrontScraper:
self.driver.get(DEALFRONT_LOGIN_URL)
# --- SCHRITT 1: Warten auf das E-Mail-Feld und ausfüllen ---
# Wir verwenden 'name' als Selektor, da dieser im HTML klar definiert ist.
# WebDriverWait stellt sicher, dass wir warten, bis das Element nicht nur da, sondern auch sichtbar ist.
# Wir verwenden 'name' als Selektor, da dieser im HTML verifiziert ist.
email_selector = (By.NAME, "email")
logger.debug(f"Warte auf die Sichtbarkeit des E-Mail-Feldes mit Selektor: {email_selector}")
email_field = self.wait.until(EC.visibility_of_element_located(email_selector))
@@ -96,17 +96,17 @@ class DealfrontScraper:
logger.info("E-Mail-Feld gefunden und ausgefüllt.")
# --- SCHRITT 2: Passwort-Feld finden und ausfüllen ---
# Wir nehmen an, dass das Passwortfeld ebenfalls 'name="password"' hat.
# Wir verwenden 'name="password"', was der Standard ist.
password_selector = (By.NAME, "password")
logger.debug(f"Suche Passwort-Feld mit Selektor: {password_selector}")
password_field = self.driver.find_element(*password_selector) # * entpackt das Tupel
password_field = self.driver.find_element(*password_selector)
password_field.send_keys(password)
logger.info("Passwort-Feld gefunden und ausgefüllt.")
# --- SCHRITT 3: Warten auf den Anmelde-Button und klicken ---
# Wir suchen nach einem Button, der den Text 'Anmelden' enthält. Das ist sehr robust.
login_button_selector = (By.XPATH, "//button[normalize-space()='Anmelden']")
logger.debug(f"Warte darauf, dass der Anmelde-Button klickbar ist mit Selektor: {login_button_selector}")
logger.debug(f"Warte darauf, dass der Anmelde-Button klickbar ist: {login_button_selector}")
login_button = self.wait.until(EC.element_to_be_clickable(login_button_selector))
login_button.click()
logger.info("Anmelde-Button geklickt. Warte auf die Verifizierung...")
@@ -114,18 +114,14 @@ class DealfrontScraper:
# --- SCHRITT 4: Login-Erfolg verifizieren ---
# Wir warten auf das Suchfeld im Dashboard.
verification_element_selector = (By.XPATH, "//input[@data-cy='header-search-input']")
logger.debug(f"Warte auf das Verifizierungs-Element mit Selektor: {verification_element_selector}")
logger.debug(f"Warte auf das Verifizierungs-Element: {verification_element_selector}")
self.wait.until(EC.visibility_of_element_located(verification_element_selector))
logger.info("Login erfolgreich! Dashboard-Element gefunden.")
logger.info("Login ERFOLGREICH! Dashboard-Element gefunden.")
return True
except TimeoutException as e:
logger.critical(f"Login fehlgeschlagen - Timeout beim Warten auf ein Element.", exc_info=True)
self._save_error_screenshot()
return False
except Exception as e:
logger.critical(f"Ein unerwarteter Fehler ist während des Logins aufgetreten: {type(e).__name__}", exc_info=True)
logger.critical(f"Ein Fehler ist während des Logins aufgetreten: {type(e).__name__}", exc_info=True)
self._save_error_screenshot()
return False