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