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()) |