from playwright.sync_api import sync_playwright def get_book_medianr(signature: str, semesterapparat_nr: int, auth: tuple) -> str: with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=True) context = browser.new_context() page = context.new_page() page.goto( "https://bsz.ibs-bw.de:22998/aDISWeb/app?service=direct/0/Home/$DirectLink&sp=SDAP42" ) page.get_by_role("textbox", name="Benutzer").fill(auth[0]) page.get_by_role("textbox", name="Benutzer").press("Tab") page.get_by_role("textbox", name="Kennwort").fill(auth[1]) page.get_by_role("textbox", name="Kennwort").press("Enter") page.get_by_role("button", name="Katalog").click() page.get_by_role("textbox", name="Signatur").click() page.get_by_role("textbox", name="Signatur").fill(signature) page.get_by_role("textbox", name="Signatur").press("Enter") book_list = page.locator("iframe").content_frame.get_by_role( "cell", name="Bibliothek der Pädagogischen" ) # this will always find one result, we need to split the resulting text based on the entries that start with "* " book_entries = book_list.inner_text().split("\n") books = [] for entry in book_entries: if entry.startswith("* "): books.append(entry) for book in books: if f"Semesterapparat: {semesterapparat_nr}" in book: return book.split("* ")[1].split(":")[0] # --------------------- context.close() browser.close()