add more options for links

This commit is contained in:
Jan Bader
2026-04-07 22:51:44 +02:00
parent 65a39c0ec4
commit 2fc484c7b7

View File

@@ -118,6 +118,14 @@ def get_year_options(page: Page) -> list[str]:
def get_invoice_links(page: Page) -> list[dict]: def get_invoice_links(page: Page) -> list[dict]:
links = [] links = []
seen = set()
def _add_link(url: str, label: str) -> None:
if not url or url in seen:
return
seen.add(url)
links.append({"url": url, "label": label})
rows = page.locator("table.billing-table tbody tr, table#billingTable tbody tr, table tbody tr").all() rows = page.locator("table.billing-table tbody tr, table#billingTable tbody tr, table tbody tr").all()
for row in rows: for row in rows:
anchors = row.locator("a[href*='billing_invoice'], a[href*='invoice']").all() anchors = row.locator("a[href*='billing_invoice'], a[href*='invoice']").all()
@@ -127,7 +135,7 @@ def get_invoice_links(page: Page) -> list[dict]:
if href: if href:
if not href.startswith("http"): if not href.startswith("http"):
href = f"{BASE_URL}/{href.lstrip('/')}" href = f"{BASE_URL}/{href.lstrip('/')}"
links.append({"url": href, "label": text}) _add_link(href, text)
if not links: if not links:
all_anchors = page.locator("a[href*='invoice']").all() all_anchors = page.locator("a[href*='invoice']").all()
@@ -137,7 +145,29 @@ def get_invoice_links(page: Page) -> list[dict]:
if href and "invoice" in href.lower(): if href and "invoice" in href.lower():
if not href.startswith("http"): if not href.startswith("http"):
href = f"{BASE_URL}/{href.lstrip('/')}" href = f"{BASE_URL}/{href.lstrip('/')}"
links.append({"url": href, "label": text}) _add_link(href, text)
if not links:
print_links = page.locator("a.no-print[data-reference-object-id], a[data-reference-object-id]").all()
for anchor in print_links:
href = anchor.get_attribute("href") or ""
if href:
if not href.startswith("http"):
href = f"{BASE_URL}/{href.lstrip('/')}"
_add_link(href, anchor.inner_text().strip())
continue
try:
anchor.scroll_into_view_if_needed()
with page.expect_popup() as popup_info:
anchor.click()
popup = popup_info.value
popup.wait_for_load_state("domcontentloaded")
label = anchor.inner_text().strip() or anchor.get_attribute("data-reference-object-id") or popup.title()
_add_link(popup.url, label)
popup.close()
except Exception as e:
logger.warning("Failed to open invoice popup: %s", e)
return links return links
@@ -285,6 +315,12 @@ def download_all_invoices() -> list[Path]:
) )
if not invoices: if not invoices:
logger.warning(
"No invoices found for group '%s', year '%s'. Browser will remain open for inspection.",
group["label"],
year,
)
input("No invoices found. Inspect the browser, then press Enter to continue...")
continue continue
year_dir.mkdir(parents=True, exist_ok=True) year_dir.mkdir(parents=True, exist_ok=True)