From 7e9ef3034cc178caaff4ce39b61bf03ca78ed31a Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 3 Jul 2025 09:13:40 +0000 Subject: [PATCH] dealfront_enrichment.py aktualisiert --- dealfront_enrichment.py | 55 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index 1ea47965..eaaa30ee 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -134,20 +134,66 @@ class DealfrontScraper: self._save_debug_artifacts() return False + def navigate_to_target_list(self, list_name: str): + """ + Navigiert nach dem Login zu einer spezifischen Zielliste im Target-Modul. + + :param list_name: Der exakte Name der Zielliste, die angeklickt werden soll. + """ + try: + # --- SCHRITT 1: Zum Target-Modul navigieren --- + # Wir verwenden die Basis-URL, da die spezifische URL Session-IDs enthalten könnte. + target_url = "https://app.dealfront.com/t" + logger.info(f"Navigiere zum Target-Modul: {target_url}") + self.driver.get(target_url) + + # --- SCHRITT 2: Auf die Liste in der Seitenleiste warten und klicken --- + # Wir suchen nach einem Link, dessen Text genau mit dem Listennamen übereinstimmt. + # Dieser XPath ist sehr spezifisch und robust. + list_selector = (By.XPATH, f"//div[contains(@class, 'list-group-item')]//a[normalize-space()='{list_name}']") + logger.debug(f"Warte darauf, dass die Zielliste '{list_name}' klickbar ist.") + + target_list_element = self.wait.until(EC.element_to_be_clickable(list_selector)) + target_list_element.click() + logger.info(f"Zielliste '{list_name}' erfolgreich angeklickt.") + + # --- SCHRITT 3: Warten, bis die Ergebnisseite geladen ist --- + # Wir verifizieren, dass der Header der Tabelle sichtbar ist. + # Ein guter Indikator ist die Spaltenüberschrift "Firma". + results_header_selector = (By.XPATH, "//th[normalize-space()='Firma']") + self.wait.until(EC.visibility_of_element_located(results_header_selector)) + logger.info("Ergebnistabelle erfolgreich geladen.") + + return True + + except Exception as e: + logger.critical(f"Fehler beim Navigieren zur Zielliste '{list_name}': {type(e).__name__}", exc_info=True) + self._save_debug_artifacts() + return False + def close(self): if self.driver: logger.info("Schließe den WebDriver.") self.driver.quit() if __name__ == "__main__": - logger.info("Starte Dealfront Automatisierung - Phase 1: Login-Test") + logger.info("Starte Dealfront Automatisierung - Phase 2: Test der Ziellisten-Navigation") + + # Der Name der Zielliste, die wir testen wollen + TARGET_LIST_NAME = "vending_slot" + scraper = None try: scraper = DealfrontScraper() if scraper.driver: if scraper.login(): - logger.info("Login-Prozess erfolgreich abgeschlossen.") - time.sleep(5) + logger.info("Login erfolgreich. Starte Navigation zur Zielliste...") + if scraper.navigate_to_target_list(TARGET_LIST_NAME): + logger.info(f"Erfolgreich zur Liste '{TARGET_LIST_NAME}' navigiert. Wir sind bereit für die Extraktion.") + # Kurze Pause, damit wir das Ergebnis sehen können + time.sleep(5) + else: + logger.error("Navigation zur Zielliste ist fehlgeschlagen.") else: logger.error("Login-Prozess ist fehlgeschlagen.") except Exception as e: @@ -155,4 +201,5 @@ if __name__ == "__main__": finally: if scraper: scraper.close() - logger.info("Login-Test beendet.") \ No newline at end of file + + logger.info("Test der Ziellisten-Navigation beendet.") \ No newline at end of file