dealfront_enrichment.py aktualisiert
This commit is contained in:
@@ -134,20 +134,66 @@ class DealfrontScraper:
|
|||||||
self._save_debug_artifacts()
|
self._save_debug_artifacts()
|
||||||
return False
|
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):
|
def close(self):
|
||||||
if self.driver:
|
if self.driver:
|
||||||
logger.info("Schließe den WebDriver.")
|
logger.info("Schließe den WebDriver.")
|
||||||
self.driver.quit()
|
self.driver.quit()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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
|
scraper = None
|
||||||
try:
|
try:
|
||||||
scraper = DealfrontScraper()
|
scraper = DealfrontScraper()
|
||||||
if scraper.driver:
|
if scraper.driver:
|
||||||
if scraper.login():
|
if scraper.login():
|
||||||
logger.info("Login-Prozess erfolgreich abgeschlossen.")
|
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)
|
time.sleep(5)
|
||||||
|
else:
|
||||||
|
logger.error("Navigation zur Zielliste ist fehlgeschlagen.")
|
||||||
else:
|
else:
|
||||||
logger.error("Login-Prozess ist fehlgeschlagen.")
|
logger.error("Login-Prozess ist fehlgeschlagen.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -155,4 +201,5 @@ if __name__ == "__main__":
|
|||||||
finally:
|
finally:
|
||||||
if scraper:
|
if scraper:
|
||||||
scraper.close()
|
scraper.close()
|
||||||
logger.info("Login-Test beendet.")
|
|
||||||
|
logger.info("Test der Ziellisten-Navigation beendet.")
|
||||||
Reference in New Issue
Block a user