dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-04 04:31:28 +00:00
parent 981a4d2a75
commit ab5b6ec480

View File

@@ -85,7 +85,7 @@ class DealfrontScraper:
logger.error(f"Konnte Debug-Artefakte nicht speichern: {e}") logger.error(f"Konnte Debug-Artefakte nicht speichern: {e}")
def login(self): def login(self):
"""Führt NUR den Login-Prozess durch und wartet danach eine feste Zeit.""" """Führt NUR den Login-Prozess durch. Klickt und geht sofort weiter."""
if not self.driver: return False if not self.driver: return False
username, password = self._load_credentials() username, password = self._load_credentials()
if not username or not password: return False if not username or not password: return False
@@ -98,10 +98,7 @@ class DealfrontScraper:
self.driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys(password) self.driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys(password)
self.driver.find_element(By.XPATH, "//button[normalize-space()='Log in']").click() self.driver.find_element(By.XPATH, "//button[normalize-space()='Log in']").click()
logger.info("Login-Befehl gesendet. Warte jetzt eine feste Zeit von 15 Sekunden, um die Session vollständig zu etablieren.") logger.info("Login-Befehl gesendet. Die Seite leitet nun weiter.")
time.sleep(15) # NEU: Erhöhte Wartezeit auf 15 Sekunden
logger.info("Wartezeit nach Login beendet. Gehe zum nächsten Schritt.")
return True return True
except Exception as e: except Exception as e:
@@ -109,6 +106,28 @@ class DealfrontScraper:
self._save_debug_artifacts() self._save_debug_artifacts()
return False return False
def navigate_to_target(self):
"""Navigiert direkt zur Target-URL und wartet auf Bestätigung."""
try:
logger.info(f"Navigiere direkt zur Target-URL: {Config.DEALFRONT_TARGET_URL}")
self.driver.get(Config.DEALFRONT_TARGET_URL)
# Warten, bis die URL sich tatsächlich ändert.
self.wait.until(EC.url_contains("/t/prospector/"))
logger.info(f"URL-Wechsel bestätigt. Aktuelle URL: {self.driver.current_url}")
# Warten, bis die Seite gerendert ist.
verification_selector = (By.XPATH, "//button[normalize-space()='+ Neue Suche']")
self.wait.until(EC.visibility_of_element_located(verification_selector))
logger.info("'Target'-Seite erfolgreich und vollständig geladen.")
return True
except Exception as e:
logger.critical(f"Navigation zur 'Target'-Seite fehlgeschlagen: {type(e).__name__}", exc_info=True)
self._save_debug_artifacts()
return False
def navigate_to_target(self): def navigate_to_target(self):
""" """
Navigiert zum 'Target'-Bereich und verifiziert den Erfolg in drei Schritten. Navigiert zum 'Target'-Bereich und verifiziert den Erfolg in drei Schritten.
@@ -208,7 +227,7 @@ class DealfrontScraper:
self.driver.quit() self.driver.quit()
if __name__ == "__main__": if __name__ == "__main__":
logger.info("Starte Dealfront Automatisierung - Phase 2a: Suche und Extraktion") logger.info("Starte Dealfront Automatisierung - Rekonstruierter Workflow")
scraper = None scraper = None
try: try:
@@ -216,22 +235,22 @@ if __name__ == "__main__":
if not scraper.driver: if not scraper.driver:
raise Exception("WebDriver konnte nicht initialisiert werden.") raise Exception("WebDriver konnte nicht initialisiert werden.")
# === GETRENNTE AUFRUFE ===
# Schritt 1: Login # Schritt 1: Login
if not scraper.login(): if not scraper.login():
raise Exception("Login fehlgeschlagen.") raise Exception("Login fehlgeschlagen.")
time.sleep(2) # Kurze Pause nach dem Login # Kurze Pause, um der Weiterleitung nach dem Login eine Chance zu geben.
# Dies ist der einzige 'sleep', den wir brauchen.
time.sleep(5)
# Schritt 2: Navigation # Schritt 2: Navigation
if not scraper.navigate_to_target(): if not scraper.navigate_to_target():
raise Exception("Navigation zur Target-Seite fehlgeschlagen.") raise Exception("Navigation zur Target-Seite fehlgeschlagen.")
# Schritt 3: Suche laden # ... (Rest der main-Funktion mit Suche und Extraktion bleibt gleich) ...
if not scraper.load_search(Config.TARGET_SEARCH_NAME): if not scraper.load_search(Config.TARGET_SEARCH_NAME):
raise Exception(f"Laden der Suche '{Config.TARGET_SEARCH_NAME}' fehlgeschlagen.") raise Exception(f"Laden der Suche '{Config.TARGET_SEARCH_NAME}' fehlgeschlagen.")
# Schritt 4: Ergebnisse extrahieren und ausgeben
companies = scraper.extract_current_page_results() companies = scraper.extract_current_page_results()
if companies: if companies:
df = pd.DataFrame(companies) df = pd.DataFrame(companies)
@@ -247,7 +266,7 @@ if __name__ == "__main__":
else: else:
logger.warning("Keine Firmen auf der ersten Seite extrahiert oder gefunden.") logger.warning("Keine Firmen auf der ersten Seite extrahiert oder gefunden.")
logger.info("Phase 2a Test erfolgreich abgeschlossen. Warte vor dem Schließen...") logger.info("Test erfolgreich abgeschlossen. Warte vor dem Schließen...")
time.sleep(10) time.sleep(10)
except Exception as e: except Exception as e: