diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index f308ff00..1ea47965 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -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: