This commit is contained in:
2025-07-03 06:31:39 +00:00
parent 31ee07cd23
commit 42359f48ba

View File

@@ -73,7 +73,8 @@ class DealfrontScraper:
def login(self): def login(self):
""" """
Führt den Login-Prozess auf der Dealfront-Plattform durch. 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: if not self.driver:
return False return False
@@ -87,8 +88,7 @@ class DealfrontScraper:
self.driver.get(DEALFRONT_LOGIN_URL) self.driver.get(DEALFRONT_LOGIN_URL)
# --- SCHRITT 1: Warten auf das E-Mail-Feld und ausfüllen --- # --- SCHRITT 1: Warten auf das E-Mail-Feld und ausfüllen ---
# Wir verwenden 'name' als Selektor, da dieser im HTML klar definiert ist. # Wir verwenden 'name' als Selektor, da dieser im HTML verifiziert ist.
# WebDriverWait stellt sicher, dass wir warten, bis das Element nicht nur da, sondern auch sichtbar ist.
email_selector = (By.NAME, "email") email_selector = (By.NAME, "email")
logger.debug(f"Warte auf die Sichtbarkeit des E-Mail-Feldes mit Selektor: {email_selector}") 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)) 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.") logger.info("E-Mail-Feld gefunden und ausgefüllt.")
# --- SCHRITT 2: Passwort-Feld finden und ausfüllen --- # --- 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") password_selector = (By.NAME, "password")
logger.debug(f"Suche Passwort-Feld mit Selektor: {password_selector}") 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) password_field.send_keys(password)
logger.info("Passwort-Feld gefunden und ausgefüllt.") logger.info("Passwort-Feld gefunden und ausgefüllt.")
# --- SCHRITT 3: Warten auf den Anmelde-Button und klicken --- # --- SCHRITT 3: Warten auf den Anmelde-Button und klicken ---
# Wir suchen nach einem Button, der den Text 'Anmelden' enthält. Das ist sehr robust. # Wir suchen nach einem Button, der den Text 'Anmelden' enthält. Das ist sehr robust.
login_button_selector = (By.XPATH, "//button[normalize-space()='Anmelden']") 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 = self.wait.until(EC.element_to_be_clickable(login_button_selector))
login_button.click() login_button.click()
logger.info("Anmelde-Button geklickt. Warte auf die Verifizierung...") logger.info("Anmelde-Button geklickt. Warte auf die Verifizierung...")
@@ -114,18 +114,14 @@ class DealfrontScraper:
# --- SCHRITT 4: Login-Erfolg verifizieren --- # --- SCHRITT 4: Login-Erfolg verifizieren ---
# Wir warten auf das Suchfeld im Dashboard. # Wir warten auf das Suchfeld im Dashboard.
verification_element_selector = (By.XPATH, "//input[@data-cy='header-search-input']") 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)) 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 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: 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() self._save_error_screenshot()
return False return False