dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-14 06:36:41 +00:00
parent 0cf6d5d61c
commit d73b0a692b

View File

@@ -150,7 +150,7 @@ class DealfrontScraper:
def scrape_all_pages(self, max_pages=10):
"""
Iteriert durch alle Ergebnisseiten, wartet nach jedem Paginieren explizit auf neue Seitenzahl,
scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu.
wartet nach jedem Seitenwechsel und Scrollen ausreichend, und sammelt alle Firmenzeilen seitengetreu.
"""
all_companies = []
for page_number in range(1, max_pages + 1):
@@ -161,7 +161,11 @@ class DealfrontScraper:
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
break
# Vor dem Klick: Aktive Seitenzahl merken
# Zusätzlicher Puffer nach dem Laden der Tabelle
logger.info("Warte 5 Sekunden, um sicherzugehen, dass alle Daten geladen sind...")
time.sleep(5)
# Vor Pagination: Aktive Seitenzahl merken
try:
active_page_elem = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active")
active_page_num = active_page_elem.text.strip()
@@ -170,12 +174,17 @@ class DealfrontScraper:
active_page_num = None
logger.warning("Vor Pagination: Konnte aktive Seite nicht ermitteln.")
# Extrahiere aktuelle Seite
# Nach unten scrollen und erneut warten
self.scroll_table_slowly()
logger.info("Warte nach Scrollen nochmals 3 Sekunden...")
time.sleep(3)
# Jetzt erst Daten extrahieren
page_results = self.extract_current_page_results()
logger.info(f"Seite {page_number}: {len(page_results)} Firmen gefunden. Gesamt bisher: {len(all_companies) + len(page_results)}")
all_companies.extend(page_results)
# Pagination-Buttons loggen
# Pagination-Buttons loggen und Weiter-Button suchen
try:
pagination_nav = self.driver.find_element(By.CSS_SELECTOR, "nav.eb-pagination")
buttons = pagination_nav.find_elements(By.CSS_SELECTOR, "a.eb-pagination-button")
@@ -190,7 +199,6 @@ class DealfrontScraper:
logger.warning("Keine Pagination-Buttons gefunden.")
buttons = []
# Suche nach dem Weiter-Button
next_button = None
for idx, btn in enumerate(buttons):
btn_html = btn.get_attribute('outerHTML')
@@ -210,11 +218,8 @@ class DealfrontScraper:
logger.info("Klicke auf 'Weiter'-Button...")
try:
# Button ins Sichtfeld scrollen!
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_button)
time.sleep(0.5)
# Button wirklich klicken
self.driver.execute_script("arguments[0].click();", next_button)
logger.info("Klick auf Weiter-Button ausgeführt.")
@@ -231,19 +236,8 @@ class DealfrontScraper:
self.wait.until(page_changed)
logger.info("Seitenwechsel erfolgreich verifiziert (aktive Seitenzahl hat sich geändert).")
# Nach jedem Seitenwechsel langsam nach unten scrollen!
self.scroll_window_slowly()
# Logge die aktuelle aktive Seite
try:
active_page = self.driver.find_element(By.CSS_SELECTOR, "a.eb-pagination-button.active").text.strip()
logger.info(f"Aktive Seite nach Pagination: {active_page}")
except NoSuchElementException:
logger.warning("Konnte aktive Seite nach Pagination nicht ermitteln.")
except Exception as e:
logger.error(f"Fehler beim Klicken auf den Weiter-Button oder beim Warten auf neue Seite: {e}")
# Screenshot und HTML speichern
try:
timestamp = time.strftime("%Y%m%d-%H%M%S")
self.driver.save_screenshot(f"/app/output/pagination_error_{timestamp}.png")