dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-08 12:06:24 +00:00
parent 21ef32cc84
commit 26cb6c6fbc

View File

@@ -122,31 +122,37 @@ class DealfrontScraper:
logger.info("Extrahiere Ergebnisse mit direkten CSS-Selektoren...")
results = []
# Warten, bis das erste Firmenelement vorhanden ist.
# Warten, bis das erste Element, das wir suchen (ein Firmenname), vorhanden ist.
company_name_selector = ".sticky-column a.t-highlight-text"
logger.info(f"Warte auf das erste Firmenelement mit Selektor: '{company_name_selector}'")
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, company_name_selector)))
time.sleep(3)
time.sleep(3) # Letzte, kurze Pause, um sicherzustellen, dass alle Elemente gerendert sind.
# Extraktion aller Elemente
company_elements = self.driver.find_elements(By.CSS_SELECTOR, company_name_selector)
website_elements = self.driver.find_elements(By.CSS_SELECTOR, "a.text-gray-400.t-highlight-text")
logger.info(f"{len(company_elements)} Firmennamen und {len(website_elements)} Webseiten-Elemente gefunden.")
num_results = min(len(company_elements), len(website_elements))
if num_results == 0:
logger.warning("Keine Firmen oder Webseiten gefunden.")
# Finde alle Tabellenzeilen, die eine ID haben. Das ist unser neuer, stabiler Anker.
rows_selector = (By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
rows = self.driver.find_elements(*rows_selector)
if not rows:
logger.warning("Keine Datenzeilen gefunden. Speichere Debug-Artefakte.")
self._save_debug_artifacts()
return []
for i in range(num_results):
company_name = company_elements[i].get_attribute("title").strip()
website = website_elements[i].text.strip()
if company_name and website:
results.append({'name': company_name, 'website': website})
logger.info(f"{len(rows)} Firmen-Datenzeilen zur Verarbeitung gefunden.")
logger.info(f"Extraktion abgeschlossen. {len(results)} Firmen erfolgreich zugeordnet.")
for i, row in enumerate(rows, 1):
try:
# Innerhalb jeder Zeile suchen wir nach den spezifischen Links.
company_name = row.find_element(By.CSS_SELECTOR, company_name_selector).get_attribute("title").strip()
website = row.find_element(By.CSS_SELECTOR, "td:nth-of-type(3) a").text.strip()
if company_name and website:
results.append({'name': company_name, 'website': website})
except NoSuchElementException:
logger.warning(f"Zeile {i}: Name oder Webseite nicht extrahierbar. Überspringe.")
continue
logger.info(f"Extraktion abgeschlossen. {len(results)} Firmen gefunden.")
return results
except Exception as e:
@@ -161,7 +167,7 @@ class DealfrontScraper:
if __name__ == "__main__":
logger.info("Starte Dealfront Automatisierung - DEBUG-MODUS")
logger.info("Starte Dealfront Automatisierung - Finaler Durchlauf")
scraper = None
try:
scraper = DealfrontScraper()
@@ -171,31 +177,33 @@ if __name__ == "__main__":
if not scraper.login_and_find_list(TempConfig.TARGET_SEARCH_NAME):
raise Exception("Der Prozess vom Login bis zum Laden der Liste ist fehlgeschlagen.")
# In dieser Version gibt es keine handle_overlays Methode mehr
# scraper.handle_overlays()
# scraper.handle_overlays() # Vorerst deaktiviert, um Fehlerquellen zu minimieren
companies = scraper.extract_current_page_results()
if companies:
df = pd.DataFrame(companies)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)
pd.set_option('display.width', 120)
pd.set_option('display.max_colwidth', None)
print("\n" + "="*80)
print(" EXTRAHIERTE FIRMEN (ERSTE SEITE) ".center(80, "="))
print("="*80)
print(df.to_string(index=False))
print("="*80 + "\n")
logger.info(f"Testlauf ERFOLGREICH. {len(df)} Firmen extrahiert.")
else:
logger.warning("Obwohl die Seite geladen wurde, konnten keine Firmen extrahiert werden.")
logger.info("Test erfolgreich abgeschlossen. Warte vor dem Schließen...")
time.sleep(10)
logger.warning("PROZESS ABGESCHLOSSEN, ABER KEINE FIRMEN EXTRAHIERT. Bitte HTML-Dump im 'output'-Ordner prüfen.")
except Exception as e:
logger.critical(f"Ein kritischer Fehler ist im Hauptprozess aufgetreten: {e}", exc_info=False)
finally:
if scraper:
# Wir lassen den Browser für 15 Sekunden offen, um das Ergebnis zu sehen
logger.info("Prozess beendet. Browser bleibt zur Inspektion 15 Sekunden geöffnet...")
time.sleep(15)
scraper.close()
logger.info("Dealfront Automatisierung beendet.")