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