From dee462c8eb957632cb40429e1f370bf9fc0a0bac Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 3 Jul 2025 11:52:40 +0000 Subject: [PATCH] bugfix --- dealfront_enrichment.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index 50f492f5..080ed16c 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -136,20 +136,34 @@ class DealfrontScraper: def navigate_to_target(self): - """Navigiert direkt zur URL des 'Target'-Bereichs.""" + """ + Navigiert zum 'Target'-Bereich und verifiziert den Erfolg in drei Schritten. + Dieser Ansatz ist maximal robust gegen Timing-Probleme von SPAs. + """ try: - logger.info(f"Navigiere direkt zur Target-URL: {Config.DEALFRONT_TARGET_URL}") + # SCHRITT 1: Befehl zur Navigation geben + logger.info(f"Gebe Navigationsbefehl zur Target-URL: {Config.DEALFRONT_TARGET_URL}") self.driver.get(Config.DEALFRONT_TARGET_URL) + + # SCHRITT 2: Warten, bis die URL in der Adresszeile sich tatsächlich ändert. + # Das ist der kritischste Schritt, um zu bestätigen, dass der Navigations-Request + # vom Browser verarbeitet wurde. Wir suchen nach dem Teil "/t/prospector/". + url_part_to_wait_for = "/t/prospector/" + logger.info(f"Warte, bis die Browser-URL '{url_part_to_wait_for}' enthält...") + self.wait.until(EC.url_contains(url_part_to_wait_for)) + logger.info(f"URL-Wechsel bestätigt. Aktuelle URL: {self.driver.current_url}") + + # SCHRITT 3: ERST JETZT auf ein sichtbares Element auf der neuen Seite warten. + # Dies bestätigt, dass die Seite nicht nur navigiert, sondern auch gerendert wurde. + verification_selector = (By.XPATH, "//button[normalize-space()='+ Neue Suche']") + logger.info(f"Warte auf Sichtbarkeit des Verifizierungs-Elements auf der Target-Seite: {verification_selector}") + self.wait.until(EC.visibility_of_element_located(verification_selector)) - # Verifizieren, dass die Seite geladen ist, indem wir auf den "+ Neue Suche"-Button warten. - # Dieser Selektor ist von unserer ursprünglichen Strategie und sollte hier funktionieren. - new_search_button_selector = (By.XPATH, "//button[normalize-space()='+ Neue Suche']") - self.wait.until(EC.visibility_of_element_located(new_search_button_selector)) - - logger.info("'Target'-Seite erfolgreich via URL-Aufruf geladen.") + logger.info("'Target'-Seite erfolgreich und vollständig geladen.") return True + except Exception as e: - logger.critical(f"Direkte Navigation zur 'Target'-Seite fehlgeschlagen: {type(e).__name__}", exc_info=True) + logger.critical(f"Navigation zur 'Target'-Seite endgültig fehlgeschlagen: {type(e).__name__}", exc_info=True) self._save_debug_artifacts() return False