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