This commit is contained in:
2025-07-03 06:55:24 +00:00
parent 0868f58ce7
commit 254fc0b587

View File

@@ -84,8 +84,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,
und verwendet die verifizierten Selektoren.
Diese Version wartet explizit auf jedes Element und verwendet
die verifizierten Selektoren aus dem HTML-Dump.
"""
if not self.driver:
return False
@@ -99,36 +99,34 @@ 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 verifiziert ist.
email_selector = (By.NAME, "email")
logger.debug(f"Warte auf die Sichtbarkeit des E-Mail-Feldes mit Selektor: {email_selector}")
email_selector = (By.CSS_SELECTOR, "input[name='email']")
logger.debug(f"Warte auf die Sichtbarkeit des E-Mail-Feldes: {email_selector}")
email_field = self.wait.until(EC.visibility_of_element_located(email_selector))
email_field.send_keys(username)
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.
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
# --- SCHRITT 2: Warten auf das Passwort-Feld und ausfüllen ---
# KORRIGIERT: Wir verwenden den CSS-Selektor für das 'type'-Attribut,
# da kein 'name'-Attribut vorhanden ist.
password_selector = (By.CSS_SELECTOR, "input[type='password']")
logger.debug(f"Warte auf die Sichtbarkeit des Passwort-Feldes: {password_selector}")
password_field = self.wait.until(EC.visibility_of_element_located(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']")
login_button_selector = (By.XPATH, "//button[normalize-space()='Log in']") # Englische Version, falls Sprache umschaltet
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...")
# --- 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: {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 Exception as e: