dealfront_enrichment.py aktualisiert
This commit is contained in:
@@ -92,6 +92,19 @@ class DealfrontScraper:
|
||||
self._save_debug_artifacts("login_exception")
|
||||
return False
|
||||
|
||||
def scroll_table_to_bottom(self):
|
||||
"""
|
||||
Scrollt das Tabellen-Element und die Seite nach unten, damit alle Zeilen sichtbar und geladen sind.
|
||||
"""
|
||||
try:
|
||||
table = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table")
|
||||
self.driver.execute_script("arguments[0].scrollIntoView(false);", table)
|
||||
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
|
||||
time.sleep(1) # Kurze Pause, damit ggf. Inhalte nachgeladen werden
|
||||
logger.info("Nach Seitenwechsel nach unten gescrollt.")
|
||||
except Exception as e:
|
||||
logger.warning(f"Fehler beim Scrollen nach unten: {e}")
|
||||
|
||||
def navigate_and_load_search(self, search_name):
|
||||
try:
|
||||
logger.info(f"Navigiere direkt zur Target-Seite und lade die Suche...")
|
||||
@@ -134,7 +147,7 @@ class DealfrontScraper:
|
||||
def scrape_all_pages(self, max_pages=10):
|
||||
"""
|
||||
Iteriert durch alle Ergebnisseiten, wartet nach jedem Paginieren explizit auf neue Daten,
|
||||
und sammelt alle Firmenzeilen seitengetreu (keine Deduplizierung).
|
||||
scrollt nach jedem Seitenwechsel nach unten und sammelt alle Firmenzeilen seitengetreu.
|
||||
"""
|
||||
all_companies = []
|
||||
for page_number in range(1, max_pages + 1):
|
||||
@@ -145,16 +158,14 @@ class DealfrontScraper:
|
||||
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
|
||||
break
|
||||
|
||||
# Vor dem Klick: Erste Zeilen-ID und Text merken
|
||||
# Vor dem Klick: IDs aller Zeilen merken
|
||||
try:
|
||||
first_row_element = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
|
||||
first_row_id = first_row_element.get_attribute("id")
|
||||
first_row_text = first_row_element.text.strip()
|
||||
logger.info(f"Vor Pagination: Erste Zeilen-ID: {first_row_id}, Text: '{first_row_text}'")
|
||||
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}")
|
||||
except NoSuchElementException:
|
||||
first_row_id = None
|
||||
first_row_text = None
|
||||
logger.warning("Vor Pagination: Keine Zeilen-ID gefunden.")
|
||||
ids_before = []
|
||||
logger.warning("Vor Pagination: Keine Zeilen gefunden.")
|
||||
|
||||
# Extrahiere aktuelle Seite
|
||||
page_results = self.extract_current_page_results()
|
||||
@@ -204,23 +215,21 @@ class DealfrontScraper:
|
||||
self.driver.execute_script("arguments[0].click();", next_button)
|
||||
logger.info("Klick auf Weiter-Button ausgeführt.")
|
||||
|
||||
# Warte auf neue Seite: Änderung der ID ODER Änderung des Texts der ersten Zeile
|
||||
# Warte auf neue Seite: Änderung der IDs der Zeilen
|
||||
def page_changed(driver):
|
||||
try:
|
||||
row = driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
|
||||
row_id = row.get_attribute("id")
|
||||
row_text = row.text.strip()
|
||||
logger.debug(f"Nach Pagination: Erste Zeilen-ID: {row_id}, Text: '{row_text}'")
|
||||
if first_row_id and row_id != first_row_id:
|
||||
return True
|
||||
if first_row_text and row_text != first_row_text:
|
||||
return True
|
||||
return False
|
||||
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
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
self.wait.until(page_changed)
|
||||
logger.info("Seitenwechsel erfolgreich verifiziert (erste Zeile hat neue ID oder neuen Text).")
|
||||
logger.info("Seitenwechsel erfolgreich verifiziert (IDs der Zeilen haben sich geändert).")
|
||||
|
||||
# NEU: Nach jedem Seitenwechsel nach unten scrollen!
|
||||
self.scroll_table_to_bottom()
|
||||
|
||||
# Logge die aktuelle aktive Seite
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user