from playwright.sync_api import sync_playwright import os from dotenv import load_dotenv import json def load_credentials()-> dict: load_dotenv() URL = os.getenv('FAKE_APP_URL') USERNAME = os.getenv('FAKE_APP_USERNAME') PASSWORD = os.getenv('FAKE_APP_PASSWORD') return (URL,USERNAME,PASSWORD) def extract_homework_text(page) -> str: card = page.get_by_title("homework") content = card.locator("[data-slot='card-content'] section > div").all() output = ["Homework:\n"] for section in content: heading = section.locator("h3").inner_text() output.append(heading) items = section.locator("ul > li").all() for item in items: # Extract full inner text including formatting inner = item.inner_text().strip() output.append(f" {inner}") output.append("") # Add a blank line between sections return "\n".join(output).strip() def extract_timetable_text(page): card = page.get_by_title("timetable") items = card.locator("[data-slot='card-content'] ul > li").all() output = ["Timetable:\n"] for item in items: # Check if it's a plain text item like "Lunch break" if item.locator("span").count() == 0: output.append(item.inner_text().strip()) else: parts = item.locator("span").all() line = " ".join([part.inner_text().strip() for part in parts]) output.append(line) return "\n".join(output).strip() # print(URL,USERNAME,PASSWORD) def get_homework() -> str: try: URL,USERNAME,PASSWORD=load_credentials() with sync_playwright() as playwright: browser = playwright.firefox.launch(headless=True) page = browser.new_page() page.goto(URL,wait_until="domcontentloaded") page.get_by_role('textbox',name='username').fill(USERNAME) page.get_by_role('textbox',name='password').fill(PASSWORD) page.get_by_role('button',name='login').click() page.wait_for_url("**/dashboard") # page.wait_for_timeout(1000) homework = extract_homework_text(page) browser.close() return homework except Exception as e: return json.dumps(e) def get_timetable() -> str: try: URL,USERNAME,PASSWORD=load_credentials() with sync_playwright() as playwright: browser = playwright.firefox.launch(headless=True) page = browser.new_page() page.goto(URL,wait_until="domcontentloaded") page.get_by_role('textbox',name='username').fill(USERNAME) page.get_by_role('textbox',name='password').fill(PASSWORD) page.get_by_role('button',name='login').click() page.wait_for_url("**/dashboard") # page.wait_for_timeout(1000) timetable = extract_timetable_text(page) browser.close() return timetable except Exception as e: return json.dumps(e) if __name__=="__main__": print(get_homework()) print() print(get_timetable())