dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-13 16:22:46 +00:00
parent d4f9d02738
commit 6a5fe4df02

View File

@@ -92,6 +92,19 @@ class DealfrontScraper:
self._save_debug_artifacts("login_exception") self._save_debug_artifacts("login_exception")
return False return False
def scroll_table_to_bottom(self):
"""
Scrollt das Tabellen-Element und die Seite nach unten, damit alle Zeilen sichtbar und geladen sind.
"""
try:
table = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table")
self.driver.execute_script("arguments[0].scrollIntoView(false);", table)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1) # Kurze Pause, damit ggf. Inhalte nachgeladen werden
logger.info("Nach Seitenwechsel nach unten gescrollt.")
except Exception as e:
logger.warning(f"Fehler beim Scrollen nach unten: {e}")
def navigate_and_load_search(self, search_name): def navigate_and_load_search(self, search_name):
try: try:
logger.info(f"Navigiere direkt zur Target-Seite und lade die Suche...") logger.info(f"Navigiere direkt zur Target-Seite und lade die Suche...")
@@ -134,7 +147,7 @@ class DealfrontScraper:
def scrape_all_pages(self, max_pages=10): def scrape_all_pages(self, max_pages=10):
""" """
Iteriert durch alle Ergebnisseiten, wartet nach jedem Paginieren explizit auf neue Daten, Iteriert durch alle Ergebnisseiten, wartet nach jedem Paginieren explizit auf neue Daten,
und sammelt alle Firmenzeilen seitengetreu (keine Deduplizierung). scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu.
""" """
all_companies = [] all_companies = []
for page_number in range(1, max_pages + 1): for page_number in range(1, max_pages + 1):
@@ -145,16 +158,14 @@ class DealfrontScraper:
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.") logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
break break
# Vor dem Klick: Erste Zeilen-ID und Text merken # Vor dem Klick: IDs aller Zeilen merken
try: try:
first_row_element = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]") rows_before = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
first_row_id = first_row_element.get_attribute("id") ids_before = [r.get_attribute("id") for r in rows_before]
first_row_text = first_row_element.text.strip() logger.info(f"Vor Pagination: IDs der Zeilen: {ids_before}")
logger.info(f"Vor Pagination: Erste Zeilen-ID: {first_row_id}, Text: '{first_row_text}'")
except NoSuchElementException: except NoSuchElementException:
first_row_id = None ids_before = []
first_row_text = None logger.warning("Vor Pagination: Keine Zeilen gefunden.")
logger.warning("Vor Pagination: Keine Zeilen-ID gefunden.")
# Extrahiere aktuelle Seite # Extrahiere aktuelle Seite
page_results = self.extract_current_page_results() page_results = self.extract_current_page_results()
@@ -204,23 +215,21 @@ class DealfrontScraper:
self.driver.execute_script("arguments[0].click();", next_button) self.driver.execute_script("arguments[0].click();", next_button)
logger.info("Klick auf Weiter-Button ausgeführt.") logger.info("Klick auf Weiter-Button ausgeführt.")
# Warte auf neue Seite: Änderung der ID ODER Änderung des Texts der ersten Zeile # Warte auf neue Seite: Änderung der IDs der Zeilen
def page_changed(driver): def page_changed(driver):
try: try:
row = driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]") rows_after = driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
row_id = row.get_attribute("id") ids_after = [r.get_attribute("id") for r in rows_after]
row_text = row.text.strip() logger.debug(f"Nach Pagination: IDs der Zeilen: {ids_after}")
logger.debug(f"Nach Pagination: Erste Zeilen-ID: {row_id}, Text: '{row_text}'") return ids_after != ids_before and len(ids_after) > 0
if first_row_id and row_id != first_row_id:
return True
if first_row_text and row_text != first_row_text:
return True
return False
except Exception: except Exception:
return False return False
self.wait.until(page_changed) self.wait.until(page_changed)
logger.info("Seitenwechsel erfolgreich verifiziert (erste Zeile hat neue ID oder neuen Text).") logger.info("Seitenwechsel erfolgreich verifiziert (IDs der Zeilen haben sich geändert).")
# NEU: Nach jedem Seitenwechsel nach unten scrollen!
self.scroll_table_to_bottom()
# Logge die aktuelle aktive Seite # Logge die aktuelle aktive Seite
try: try: