From fa65e993106bad9965b1dc3abe8b225b80fac6d8 Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 20 Mar 2026 19:53:00 +0000 Subject: [PATCH] fix(scraper): improve navigation and click reliability for export [32788f42] --- fotograf-de-scraper/backend/main.py | 37 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/fotograf-de-scraper/backend/main.py b/fotograf-de-scraper/backend/main.py index 3cbae63e3..ae064e8be 100644 --- a/fotograf-de-scraper/backend/main.py +++ b/fotograf-de-scraper/backend/main.py @@ -317,32 +317,43 @@ async def generate_pdf(job_id: str, account_type: str): if not login(driver, username, password): raise HTTPException(status_code=401, detail="Login failed.") - # 1. Navigate to names list page (where the export button lives) - reg_url = f"https://app.fotograf.de/config_children/view_names_list/{job_id}" - logger.info(f"Navigating to names list (Personen): {reg_url}") - driver.get(reg_url) + # 1. Navigate to job settings page first + job_url = f"https://app.fotograf.de/config_jobs_settings/index/{job_id}" + logger.info(f"Navigating to job main page: {job_url}") + driver.get(job_url) wait = WebDriverWait(driver, 30) + # Get Institution Name for PDF try: institution = driver.find_element(By.TAG_NAME, "h1").text.strip() logger.debug(f"Detected institution name: {institution}") except: institution = "Fotoauftrag" - logger.info("Triggering CSV Export...") - export_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, SELECTORS["export_dropdown"]))) - export_btn.click() + # 1.5 Click on the "Personen" tab + logger.info("Clicking on 'Personen' tab...") + personen_tab = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[data-qa-id='link:photo-jobs-tabs-names_list']"))) + personen_tab.click() + + # Wait for the export button to become present on the new tab + logger.info("Waiting for Export Dropdown...") + export_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, SELECTORS["export_dropdown"])))) + + # Scroll to it and click via JS to avoid obscuring elements + driver.execute_script("arguments[0].scrollIntoView(true);", export_btn) + time.sleep(1) # small pause after scroll + logger.info("Clicking Export Dropdown...") + driver.execute_script("arguments[0].click();", export_btn) + logger.debug("Export dropdown clicked, waiting for menu items...") time.sleep(2) try: - csv_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, SELECTORS["export_csv_link"]))) - csv_btn.click() - logger.info("CSV Export button clicked.") + csv_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, SELECTORS["export_csv_link"])))) + logger.info("CSV Export button found. Clicking...") + driver.execute_script("arguments[0].click();", csv_btn) except TimeoutException: - logger.error("CSV Button not found after clicking dropdown.") - take_error_screenshot(driver, "csv_button_missing") - raise HTTPException(status_code=500, detail="CSV Export Button konnte nicht gefunden werden.") + # Wait for file to appear logger.debug("Waiting for CSV file in download directory...")