From 625de084aa591ae29305a0af02131a97cfbdebd8 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 3 Jul 2025 20:02:22 +0000 Subject: [PATCH] dealfront_enrichment.py aktualisiert --- dealfront_enrichment.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index 4d491c04..197d379e 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -152,20 +152,23 @@ class DealfrontScraper: def extract_current_page_results(self): """ Extrahiert die Firmennamen und Webseiten von der aktuellen Ergebnisseite - unter Verwendung der verifizierten CSS-Selektoren. + unter Verwendung der verifizierten HTML-Struktur. """ try: 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]") + # 1. Finde alle Zeilen der Tabelle. + # Jede Zeile ist ein ``-Element mit einer ID innerhalb des ``. + rows_selector = (By.CSS_SELECTOR, "table#t-result-table tbody > tr[id]") + # Wir warten explizit, bis mindestens eine Zeile geladen ist. - self.wait.until(EC.presence_of_all_elements_located(rows_selector)) + self.wait.until(EC.presence_of_element_located(rows_selector)) + time.sleep(2) # Kurze zusätzliche Pause, um sicherzustellen, dass JS die Tabelle vollständig rendert. rows = self.driver.find_elements(*rows_selector) if not rows: - logger.warning("Keine Ergebniszeilen auf der Seite gefunden, obwohl darauf gewartet wurde.") + logger.warning("Keine Ergebniszeilen (tr[id]) auf der Seite gefunden.") self._save_debug_artifacts() return [] @@ -176,15 +179,16 @@ class DealfrontScraper: company_name = "" website = "" try: - # Firmenname extrahieren - # Selektor: .sticky-column a.t-highlight-text - company_name_selector = (By.CSS_SELECTOR, ".sticky-column a.t-highlight-text") + # Firmenname extrahieren: + # Wir suchen nach dem Link innerhalb der Zelle mit der CSS-Klasse 'sticky-after-checkbox' + company_name_selector = (By.CSS_SELECTOR, "td.sticky-after-checkbox 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 + # Webseite extrahieren: + # Wir suchen nach dem Link in der Zelle, die direkt auf die 'countryCode'-Zelle folgt. + # Dies ist eine Annahme basierend auf der Spaltenreihenfolge. Eine bessere Methode wäre, die Spalten dynamisch zuzuordnen. + # Fürs Erste probieren wir es mit der Spaltenposition (dritte td). website_selector = (By.CSS_SELECTOR, "td:nth-of-type(3) a") website_element = row.find_element(*website_selector) website = website_element.text.strip() @@ -196,8 +200,6 @@ class DealfrontScraper: except NoSuchElementException: 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.")