diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index 301913bd..5638daf3 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -178,18 +178,29 @@ class DealfrontScraper: return False def load_search(self, search_name): - # (Diese Methode bleibt vorerst unverändert) + """Lädt eine vordefinierte Suche anhand ihres Namens.""" try: - logger.info(f"Suche und lade die vordefinierte Suche: '{search_name}'") - search_link_selector = (By.XPATH, f"//div[contains(@class, 'truncate') and normalize-space()='{search_name}']") + logger.info(f"Warte, bis die Liste der gespeicherten Suchen sichtbar ist...") + # Wir warten auf den Container, der alle Such-Items enthält. + # Ein guter Selektor ist das `ul`-Element mit der ID, die mit `eb-popup` beginnt. + # Oder allgemeiner: Ein Element, das den Text einer bekannten Suche enthält. + search_list_container_selector = (By.XPATH, f"//div[normalize-space()='{search_name}']") + self.wait.until(EC.visibility_of_element_located(search_list_container_selector)) + logger.info(f"Liste gefunden. Klicke jetzt auf die vordefinierte Suche: '{search_name}'") + + # Der XPath sucht nach einem Element (div, a, button), dessen Text exakt übereinstimmt. + search_link_selector = (By.XPATH, f"//*[normalize-space()='{search_name}']") search_link = self.wait.until(EC.element_to_be_clickable(search_link_selector)) search_link.click() - + + # Verifizieren, dass die Ergebnisse geladen sind, indem wir auf die Ergebnistabelle warten. results_table_header_selector = (By.XPATH, "//th[normalize-space()='Firma']") self.wait.until(EC.visibility_of_element_located(results_table_header_selector)) logger.info(f"Suche '{search_name}' erfolgreich geladen und Ergebnisse angezeigt.") - time.sleep(3) + + time.sleep(3) # Feste Wartezeit, damit alle Daten nachgeladen sind. return True + except Exception as e: logger.critical(f"Laden der Suche '{search_name}' fehlgeschlagen: {type(e).__name__}", exc_info=True) self._save_debug_artifacts()