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): 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. scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu.
""" """
all_companies = [] all_companies = []
@@ -161,14 +161,14 @@ class DealfrontScraper:
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.") logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
break break
# Vor dem Klick: IDs aller Zeilen merken # Vor dem Klick: Aktive Seitenzahl merken
try: try:
rows_before = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]") active_page_elem = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active")
ids_before = [r.get_attribute("id") for r in rows_before] active_page_num = active_page_elem.text.strip()
logger.info(f"Vor Pagination: IDs der Zeilen: {ids_before}") logger.info(f"Vor Pagination: Aktive Seite: {active_page_num}")
except NoSuchElementException: except NoSuchElementException:
ids_before = [] active_page_num = None
logger.warning("Vor Pagination: Keine Zeilen gefunden.") logger.warning("Vor Pagination: Konnte aktive Seite nicht ermitteln.")
# Extrahiere aktuelle Seite # Extrahiere aktuelle Seite
page_results = self.extract_current_page_results() page_results = self.extract_current_page_results()
@@ -212,27 +212,27 @@ class DealfrontScraper:
try: try:
# Button ins Sichtfeld scrollen! # Button ins Sichtfeld scrollen!
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_button) 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 # Button wirklich klicken
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 IDs der Zeilen # Warte auf neue aktive Seitenzahl
def page_changed(driver): def page_changed(driver):
try: try:
rows_after = driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]") elem = driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active")
ids_after = [r.get_attribute("id") for r in rows_after] page_num = elem.text.strip()
logger.debug(f"Nach Pagination: IDs der Zeilen: {ids_after}") logger.debug(f"Nach Pagination: Aktive Seite: {page_num}")
return ids_after != ids_before and len(ids_after) > 0 return page_num != active_page_num
except Exception: except Exception:
return False return False
self.wait.until(page_changed) 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! # Nach jedem Seitenwechsel langsam nach unten scrollen!
self.scroll_table_slowly() self.scroll_window_slowly()
# Logge die aktuelle aktive Seite # Logge die aktuelle aktive Seite
try: try:
@@ -252,15 +252,6 @@ class DealfrontScraper:
logger.info(f"Screenshot und HTML der Seite nach Pagination-Fehler gespeichert.") logger.info(f"Screenshot und HTML der Seite nach Pagination-Fehler gespeichert.")
except Exception as ee: except Exception as ee:
logger.error(f"Fehler beim Speichern von Screenshot/HTML: {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 break
return all_companies return all_companies