dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-14 06:27:39 +00:00
parent a5cf7c7f4b
commit 83d2ec331e

View File

@@ -149,7 +149,7 @@ class DealfrontScraper:
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 Seitenzahl,
scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu.
"""
all_companies = []
@@ -161,14 +161,14 @@ class DealfrontScraper:
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
break
# Vor dem Klick: IDs aller Zeilen merken
# Vor dem Klick: Aktive Seitenzahl merken
try:
rows_before = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
ids_before = [r.get_attribute("id") for r in rows_before]
logger.info(f"Vor Pagination: IDs der Zeilen: {ids_before}")
active_page_elem = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active")
active_page_num = active_page_elem.text.strip()
logger.info(f"Vor Pagination: Aktive Seite: {active_page_num}")
except NoSuchElementException:
ids_before = []
logger.warning("Vor Pagination: Keine Zeilen gefunden.")
active_page_num = None
logger.warning("Vor Pagination: Konnte aktive Seite nicht ermitteln.")
# Extrahiere aktuelle Seite
page_results = self.extract_current_page_results()
@@ -212,27 +212,27 @@ class DealfrontScraper:
try:
# Button ins Sichtfeld scrollen!
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_button)
time.sleep(0.5) # Kurze Pause, damit das Scrollen abgeschlossen ist
time.sleep(0.5)
# Button wirklich klicken
self.driver.execute_script("arguments[0].click();", next_button)
logger.info("Klick auf Weiter-Button ausgeführt.")
# Warte auf neue Seite: Änderung der IDs der Zeilen
# Warte auf neue aktive Seitenzahl
def page_changed(driver):
try:
rows_after = driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
ids_after = [r.get_attribute("id") for r in rows_after]
logger.debug(f"Nach Pagination: IDs der Zeilen: {ids_after}")
return ids_after != ids_before and len(ids_after) > 0
elem = driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active")
page_num = elem.text.strip()
logger.debug(f"Nach Pagination: Aktive Seite: {page_num}")
return page_num != active_page_num
except Exception:
return False
self.wait.until(page_changed)
logger.info("Seitenwechsel erfolgreich verifiziert (IDs der Zeilen haben sich geändert).")
logger.info("Seitenwechsel erfolgreich verifiziert (aktive Seitenzahl hat sich geändert).")
# NEU: Nach jedem Seitenwechsel nach unten scrollen!
self.scroll_table_slowly()
# Nach jedem Seitenwechsel langsam nach unten scrollen!
self.scroll_window_slowly()
# Logge die aktuelle aktive Seite
try:
@@ -252,15 +252,6 @@ class DealfrontScraper:
logger.info(f"Screenshot und HTML der Seite nach Pagination-Fehler gespeichert.")
except Exception as ee:
logger.error(f"Fehler beim Speichern von Screenshot/HTML: {ee}")
# Zusätzlich: Logge alle Zeilen nach dem Fehler (nur Text und HTML-Start)
try:
all_rows = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr")
logger.info(f"Nach Pagination-Fehler: Es sind {len(all_rows)} Zeilen im DOM.")
for i, r in enumerate(all_rows):
html_snippet = r.get_attribute('outerHTML')[:120].replace('\n', ' ')
logger.info(f"Zeile {i}: Text='{r.text.strip()}', HTML-Start={html_snippet}...")
except Exception as eee:
logger.error(f"Fehler beim Loggen der Zeilen nach Fehler: {eee}")
break
return all_companies