from playwright.sync_api import sync_playwright import os from dotenv import load_dotenv import time import base64 # 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 decode_token(base64_token) -> str: base64_bytes = base64_token.encode("ascii") token_bytes = base64.b64decode(base64_bytes) token = token_bytes.decode("ascii") # print(token) return token 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(base64_token) -> str: token=decode_token(base64_token) # print(token) URL,USERNAME,PASSWORD=token.split("") 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 def get_timetable(base64_token) -> str: token=decode_token(base64_token) URL,USERNAME,PASSWORD=token.split("") # 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 if __name__=="__main__": print(get_homework()) print() print(get_timetable())