Spaces:
Sleeping
Sleeping
| 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()) |