diff --git a/sync/src/scraper.ts b/sync/src/scraper.ts index 9b6233d..14820a5 100644 --- a/sync/src/scraper.ts +++ b/sync/src/scraper.ts @@ -241,9 +241,9 @@ export async function scrapeAll(username: string, password: string, knownStNrs: const idPersonen = urlObj.searchParams.get('id_personen'); const idInstanzen = urlObj.searchParams.get('id_instanzen') ?? ID_INSTANZEN; - // Ausbildungen - const quals = await scrapeAusbildungenFromDetailPage(mainFrame, member, idMitgliedschaft, idPersonen); - ausbildungen.push(...quals); + // Ausbildungen — disabled: requires different page/approach (TODO) + // const quals = await scrapeAusbildungenFromDetailPage(mainFrame, member, idMitgliedschaft, idPersonen); + // ausbildungen.push(...quals); // Beförderungen const befos = (idMitgliedschaft && idPersonen) @@ -281,6 +281,20 @@ async function frame_goto(frame: Frame, url: string): Promise { await frame.goto(url, { waitUntil: 'networkidle' }); } +/** Select "Alle" in the anzeige_count dropdown to show all rows, then wait for reload. */ +async function selectAlleAnzeige(frame: Frame): Promise { + try { + const sel = frame.locator('select[name="anzeige_count"], select#anzeige_count'); + if (await sel.count() === 0) return; + const current = await sel.inputValue().catch(() => ''); + if (current === 'ALLE') return; // already showing all + await sel.selectOption('ALLE'); + await frame.waitForLoadState('networkidle').catch(() => {}); + } catch { + // Dropdown may not exist on all pages — that's OK + } +} + async function login(page: Page, username: string, password: string): Promise { log(`Navigating to ${LOGIN_URL}`); await page.goto(LOGIN_URL, { waitUntil: 'domcontentloaded' }); @@ -890,6 +904,10 @@ async function navigateAndGetTableRows( return null; } + // Show all rows (default is 10) + await selectAlleAnzeige(frame); + } + // Log all table classes on the page for diagnostics (first time only) const tableInfo = await frame.evaluate(() => { return Array.from(document.querySelectorAll('table')).map((t, i) => { @@ -1078,6 +1096,9 @@ async function scrapeMemberFahrgenehmigungen( return []; } + // Show all rows (default is 10) + await selectAlleAnzeige(frame); + // Dump HTML for diagnostics await dumpHtml(frame, `fahrgenehmigungen_StNr${standesbuchNr}`);