|
from playwright.sync_api import sync_playwright |
|
import os |
|
from dotenv import load_dotenv |
|
import time |
|
import base64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def decode_token(base64_token) -> str: |
|
base64_bytes = base64_token.encode("ascii") |
|
token_bytes = base64.b64decode(base64_bytes) |
|
token = token_bytes.decode("ascii") |
|
|
|
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: |
|
|
|
inner = item.inner_text().strip() |
|
output.append(f" {inner}") |
|
output.append("") |
|
|
|
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: |
|
|
|
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() |
|
|
|
|
|
|
|
def get_homework(base64_token) -> str: |
|
token=decode_token(base64_token) |
|
|
|
URL,USERNAME,PASSWORD=token.split("<sep>") |
|
|
|
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") |
|
|
|
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("<sep>") |
|
|
|
|
|
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") |
|
|
|
timetable = extract_timetable_text(page) |
|
browser.close() |
|
|
|
return timetable |
|
|
|
if __name__=="__main__": |
|
print(get_homework()) |
|
print() |
|
print(get_timetable()) |