From 4947b38d0c1a71270932e10ef614f2a7c1b5857a Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 3 Jul 2025 19:41:20 +0000 Subject: [PATCH] dealfront_enrichment.py aktualisiert --- dealfront_enrichment.py | 53 +++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index ce012b27..97637eb8 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -148,33 +148,62 @@ class DealfrontScraper: self._save_debug_artifacts() return False - def extract_current_page_results(self): - # (Diese Methode bleibt vorerst unverändert) - logger.info("Extrahiere Ergebnisse von der aktuellen Seite...") - results = [] + def extract_current_page_results(self): + """ + Extrahiert die Firmennamen und Webseiten von der aktuellen Ergebnisseite + unter Verwendung der verifizierten CSS-Selektoren. + """ try: - rows_selector = (By.XPATH, "//tbody/tr") + logger.info("Extrahiere Ergebnisse von der aktuellen Seite...") + results = [] + + # 1. Finde alle Zeilen der Tabelle. Ein `tr` mit einer ID ist ein sehr guter Anker. + rows_selector = (By.CSS_SELECTOR, "tbody > tr[id]") + # Wir warten explizit, bis mindestens eine Zeile geladen ist. + self.wait.until(EC.presence_of_all_elements_located(rows_selector)) rows = self.driver.find_elements(*rows_selector) if not rows: - logger.warning("Keine Ergebniszeilen auf der Seite gefunden.") + logger.warning("Keine Ergebniszeilen auf der Seite gefunden, obwohl darauf gewartet wurde.") self._save_debug_artifacts() return [] - logger.info(f"{len(rows)} Ergebniszeilen gefunden.") - for row in rows: + logger.info(f"{len(rows)} Ergebniszeilen zur Verarbeitung gefunden.") + + # 2. Iteriere durch jede Zeile und extrahiere die Daten. + for i, row in enumerate(rows): + company_name = "" + website = "" try: - company_name = row.find_element(By.XPATH, ".//td[2]//a").text.strip() - website = row.find_element(By.XPATH, ".//td[3]//a").text.strip() + # Firmenname extrahieren + # Selektor: .sticky-column a.t-highlight-text + company_name_selector = (By.CSS_SELECTOR, ".sticky-column a.t-highlight-text") + company_name_element = row.find_element(*company_name_selector) + company_name = company_name_element.text.strip() + + # Webseite extrahieren + # Selektor: td a.text-gray-400.t-highlight-text + # Wir suchen nach der dritten Tabellenzelle (td) und dann dem Link darin + website_selector = (By.CSS_SELECTOR, "td:nth-of-type(3) a") + website_element = row.find_element(*website_selector) + website = website_element.text.strip() + if company_name and website: results.append({'name': company_name, 'website': website}) + else: + logger.warning(f"Zeile {i+1}: Unvollständige Daten (Name: '{company_name}', Webseite: '{website}').") + except NoSuchElementException: - logger.warning("Konnte Name oder Webseite in einer Zeile nicht finden, überspringe Zeile.") + logger.warning(f"Zeile {i+1}: Ein erwartetes Element (Name oder Webseite) wurde nicht gefunden. Überspringe diese Zeile.") + # Optional: HTML der problematischen Zeile ausgeben für tiefere Analyse + # logger.debug(f"HTML der fehlerhaften Zeile: {row.get_attribute('outerHTML')}") continue + logger.info(f"{len(results)} Firmen erfolgreich extrahiert.") return results + except Exception as e: - logger.error(f"Fehler bei der Extraktion der Ergebnisse: {type(e).__name__}", exc_info=True) + logger.error(f"Ein schwerwiegender Fehler ist bei der Extraktion der Ergebnisse aufgetreten: {type(e).__name__}", exc_info=True) self._save_debug_artifacts() return []