dealfront_enrichment.py aktualisiert
This commit is contained in:
@@ -139,7 +139,11 @@ class DealfrontScraper:
|
|||||||
all_companies = []
|
all_companies = []
|
||||||
for page_number in range(1, max_pages + 1):
|
for page_number in range(1, max_pages + 1):
|
||||||
logger.info(f"--- Verarbeite Seite {page_number} ---")
|
logger.info(f"--- Verarbeite Seite {page_number} ---")
|
||||||
|
try:
|
||||||
self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table#t-result-table")))
|
self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table#t-result-table")))
|
||||||
|
except TimeoutException:
|
||||||
|
logger.error("Ergebnistabelle wurde nicht geladen. Breche ab.")
|
||||||
|
break
|
||||||
|
|
||||||
# Vor dem Klick: Erste Zeilen-ID und Text merken
|
# Vor dem Klick: Erste Zeilen-ID und Text merken
|
||||||
try:
|
try:
|
||||||
@@ -147,10 +151,10 @@ class DealfrontScraper:
|
|||||||
first_row_id = first_row_element.get_attribute("id")
|
first_row_id = first_row_element.get_attribute("id")
|
||||||
first_row_text = first_row_element.text.strip()
|
first_row_text = first_row_element.text.strip()
|
||||||
logger.info(f"Vor Pagination: Erste Zeilen-ID: {first_row_id}, Text: '{first_row_text}'")
|
logger.info(f"Vor Pagination: Erste Zeilen-ID: {first_row_id}, Text: '{first_row_text}'")
|
||||||
except Exception as e:
|
except NoSuchElementException:
|
||||||
first_row_id = None
|
first_row_id = None
|
||||||
first_row_text = None
|
first_row_text = None
|
||||||
logger.warning(f"Vor Pagination: Keine Zeilen-ID gefunden: {e}")
|
logger.warning("Vor Pagination: Keine Zeilen-ID gefunden.")
|
||||||
|
|
||||||
# Extrahiere aktuelle Seite
|
# Extrahiere aktuelle Seite
|
||||||
page_results = self.extract_current_page_results()
|
page_results = self.extract_current_page_results()
|
||||||
@@ -167,17 +171,20 @@ class DealfrontScraper:
|
|||||||
btn_classes = btn.get_attribute('class')
|
btn_classes = btn.get_attribute('class')
|
||||||
btn_html = btn.get_attribute('outerHTML')
|
btn_html = btn.get_attribute('outerHTML')
|
||||||
has_svg = "svg" in btn_html
|
has_svg = "svg" in btn_html
|
||||||
logger.info(f"Button {idx}: Text='{btn_text}', Klassen='{btn_classes}', SVG={has_svg}, HTML={btn_html}")
|
logger.info(f"Button {idx}: Text='{btn_text}', Klassen='{btn_classes}', SVG={has_svg}, HTML-Start={btn_html[:120]}...")
|
||||||
except Exception as e:
|
except NoSuchElementException:
|
||||||
logger.warning(f"Konnte Pagination-Buttons nicht vollständig loggen: {e}")
|
logger.warning("Keine Pagination-Buttons gefunden.")
|
||||||
buttons = []
|
buttons = []
|
||||||
|
|
||||||
# Suche nach dem Weiter-Button
|
# Suche nach dem Weiter-Button
|
||||||
next_button = None
|
next_button = None
|
||||||
for i, r in enumerate(all_rows):
|
for idx, btn in enumerate(buttons):
|
||||||
html_snippet = r.get_attribute('outerHTML')[:120].replace('\n', ' ')
|
btn_html = btn.get_attribute('outerHTML')
|
||||||
logger.info(f"Zeile {i}: Text='{r.text.strip()}', HTML-Start={html_snippet}...")
|
btn_text = btn.text.strip()
|
||||||
if ("svg" in btn_html) and ("disabled" not in btn.get_attribute('class')) and (btn.text.strip() == ""):
|
btn_classes = btn.get_attribute('class')
|
||||||
|
has_svg = "svg" in btn_html
|
||||||
|
is_disabled = "disabled" in btn_classes
|
||||||
|
if has_svg and not is_disabled and btn_text == "":
|
||||||
next_button = btn
|
next_button = btn
|
||||||
logger.info(f"Als Weiter-Button erkannt: Button {idx}")
|
logger.info(f"Als Weiter-Button erkannt: Button {idx}")
|
||||||
break
|
break
|
||||||
@@ -200,6 +207,28 @@ class DealfrontScraper:
|
|||||||
# Warte auf neue Seite: Änderung der ID ODER Änderung des Texts der ersten Zeile
|
# Warte auf neue Seite: Änderung der ID ODER Änderung des Texts der ersten Zeile
|
||||||
def page_changed(driver):
|
def page_changed(driver):
|
||||||
try:
|
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
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.wait.until(page_changed)
|
||||||
|
logger.info("Seitenwechsel erfolgreich verifiziert (erste Zeile hat neue ID oder neuen Text).")
|
||||||
|
|
||||||
|
# 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:
|
except Exception as e:
|
||||||
logger.error(f"Fehler beim Klicken auf den Weiter-Button oder beim Warten auf neue Seite: {e}")
|
logger.error(f"Fehler beim Klicken auf den Weiter-Button oder beim Warten auf neue Seite: {e}")
|
||||||
# Screenshot und HTML speichern
|
# Screenshot und HTML speichern
|
||||||
@@ -214,14 +243,12 @@ class DealfrontScraper:
|
|||||||
# Zusätzlich: Logge alle Zeilen nach dem Fehler (nur Text und HTML-Start)
|
# Zusätzlich: Logge alle Zeilen nach dem Fehler (nur Text und HTML-Start)
|
||||||
try:
|
try:
|
||||||
all_rows = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr")
|
all_rows = self.driver.find_elements(By.CSS_SELECTOR, "table#t-result-table tbody tr")
|
||||||
except Exception as eee:
|
|
||||||
logger.error(f"Fehler beim Finden der Tabellenzeilen nach Fehler: {eee}")
|
|
||||||
all_rows = []
|
|
||||||
|
|
||||||
logger.info(f"Nach Pagination-Fehler: Es sind {len(all_rows)} Zeilen im DOM.")
|
logger.info(f"Nach Pagination-Fehler: Es sind {len(all_rows)} Zeilen im DOM.")
|
||||||
for i, r in enumerate(all_rows):
|
for i, r in enumerate(all_rows):
|
||||||
html_snippet = r.get_attribute('outerHTML')[:120].replace('\n', ' ')
|
html_snippet = r.get_attribute('outerHTML')[:120].replace('\n', ' ')
|
||||||
logger.info(f"Zeile {i}: Text='{r.text.strip()}', HTML-Start={html_snippet}...")
|
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