diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index 31b1c408..8e5e7bbf 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -150,7 +150,7 @@ class DealfrontScraper: def scrape_all_pages(self, max_pages=10): """ Iteriert durch alle Ergebnisseiten, wartet nach jedem Paginieren explizit auf neue Seitenzahl, - scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu. + wartet nach jedem Seitenwechsel und Scrollen ausreichend, und sammelt alle Firmenzeilen seitengetreu. """ all_companies = [] for page_number in range(1, max_pages + 1): @@ -161,7 +161,11 @@ class DealfrontScraper: logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.") break - # Vor dem Klick: Aktive Seitenzahl merken + # Zusätzlicher Puffer nach dem Laden der Tabelle + logger.info("Warte 5 Sekunden, um sicherzugehen, dass alle Daten geladen sind...") + time.sleep(5) + + # Vor Pagination: Aktive Seitenzahl merken try: active_page_elem = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active") active_page_num = active_page_elem.text.strip() @@ -170,12 +174,17 @@ class DealfrontScraper: active_page_num = None logger.warning("Vor Pagination: Konnte aktive Seite nicht ermitteln.") - # Extrahiere aktuelle Seite + # Nach unten scrollen und erneut warten + self.scroll_table_slowly() + logger.info("Warte nach Scrollen nochmals 3 Sekunden...") + time.sleep(3) + + # Jetzt erst Daten extrahieren page_results = self.extract_current_page_results() logger.info(f"Seite {page_number}: {len(page_results)} Firmen gefunden. Gesamt bisher: {len(all_companies) + len(page_results)}") all_companies.extend(page_results) - # Pagination-Buttons loggen + # Pagination-Buttons loggen und Weiter-Button suchen try: pagination_nav = self.driver.find_element(By.CSS_SELECTOR, "nav.eb-pagination") buttons = pagination_nav.find_elements(By.CSS_SELECTOR, "a.eb-pagination-button") @@ -190,7 +199,6 @@ class DealfrontScraper: logger.warning("Keine Pagination-Buttons gefunden.") buttons = [] - # Suche nach dem Weiter-Button next_button = None for idx, btn in enumerate(buttons): btn_html = btn.get_attribute('outerHTML') @@ -210,11 +218,8 @@ class DealfrontScraper: logger.info("Klicke auf 'Weiter'-Button...") try: - # Button ins Sichtfeld scrollen! self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_button) time.sleep(0.5) - - # Button wirklich klicken self.driver.execute_script("arguments[0].click();", next_button) logger.info("Klick auf Weiter-Button ausgeführt.") @@ -231,19 +236,8 @@ class DealfrontScraper: self.wait.until(page_changed) logger.info("Seitenwechsel erfolgreich verifiziert (aktive Seitenzahl hat sich geändert).") - # Nach jedem Seitenwechsel langsam nach unten scrollen! - self.scroll_window_slowly() - - # Logge die aktuelle aktive Seite - try: - active_page = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active").text.strip() - logger.info(f"Aktive Seite nach Pagination: {active_page}") - except NoSuchElementException: - logger.warning("Konnte aktive Seite nach Pagination nicht ermitteln.") - except Exception as e: logger.error(f"Fehler beim Klicken auf den Weiter-Button oder beim Warten auf neue Seite: {e}") - # Screenshot und HTML speichern try: timestamp = time.strftime("%Y%m%d-%H%M%S") self.driver.save_screenshot(f"/app/output/pagination_error_{timestamp}.png")