Purpose
Retrieve the PDF for a specified newspaper issue from the GENIOS VÖBB library portal.
When to Use
Use when the caller provides a GENIOS browse path or publication plus issue preview identifier and needs the issue's ePaper PDF. The caller may need an active VÖBB library login.
Workflow
- Navigate directly to the issue URL, preserving the
previewquery parameter:https://bib-voebb.genios.de/browse/{publication-path}?preview={issue-preview-id} - If redirected to VÖBB OpenID Connect, fill the supplied credentials into
input[type='text'][name='L#AUSW']andinput#LPASSW, then submitinput[name='LLOGIN']. Follow the live redirect; the login submission may navigate to/oidcp/logincheck. - After the login redirect, submit the authorization confirmation with
input[name='CLOGIN']. Consent controls are conditional: dismissbutton[aria-label='Ablehnen'], or usebutton[aria-label='Mehr Informationen']followed bybutton[aria-label='Alles akzeptieren']when that consent interface is shown. Submit the page'sbutton[type='submit']if the authorization page still requires it. - If the callback does not return directly to the issue, navigate once more to the original issue URL. On the authenticated issue page, run this evaluator to locate the ePaper PDF control across the document and open same-origin shadow roots/iframes:
(() => { const found = []; const seen = new Set(); const walk = (root, path = "document") => { if (!root || seen.has(root)) return; seen.add(root); const nodes = root.querySelectorAll ? [...root.querySelectorAll('[data-text="ePaper PDF"]')] : []; for (const el of nodes) { const a = el.closest("a"); found.push({ path, tag: el.tagName, text: (el.innerText || el.textContent || "").trim(), href: a?.href || el.getAttribute("href") || null, clickable: typeof el.click === "function", outerHTML: el.outerHTML, }); } for (const el of root.querySelectorAll ? root.querySelectorAll("*") : []) { if (el.shadowRoot) walk(el.shadowRoot, `${path}>${el.tagName}`); if (el.tagName === "IFRAME") { try { walk(el.contentDocument, `${path}>iframe`); } catch (_) {} } } }; walk(document); return found.length ? { found: true, controls: found } : { found: false, error: "ePaper PDF control not found" }; })(); - If the evaluator returns a non-null
href, navigate to that target or return it as the PDF URL. Otherwise activate the located[data-text="ePaper PDF"]control once and return the browser-provided PDF or download target.
Site-Specific Gotchas
- The issue page requires the non-obvious
preview={issue-preview-id}query parameter; retain it exactly. - Authentication leaves the GENIOS domain for VÖBB's OpenID Connect endpoint (
/oidcp/authorize) and returns through/openIdConnectClient/authorizationCallback. - The observed authorization URL uses client
genios001, scopeopenid adisbms, response typecode, and a dynamicstate; follow the live redirect rather than hard-coding state or authorization codes. - OpenID
stateand authorization codes are dynamic; never hard-code them. - The library login form uses non-semantic fields, notably
name='L#AUSW'andid='LPASSW'; do not rely on generic visible labels. - The authorization flow may require both the login submit (
LLOGIN) and a subsequent confirmation submit (CLOGIN). - Cookie consent may appear at different points in the flow. Use either the reject control or the expanded consent path (
Mehr InformationenthenAlles akzeptieren) if present, and do not assume either is always shown. - The PDF control is identified by
data-text="ePaper PDF", not dependable layout or visible-text selectors; it may be nested in an open shadow root or same-origin iframe. - Publication paths may contain URL-encoded spaces and nested category segments; URL-encode path components when constructing them.
Expected Output
Return the PDF URL or downloaded PDF. If authentication or the control is unavailable, report that state instead of guessing a URL.