dealfront_enrichment.py aktualisiert
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user