81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
Open the Medevio daily agenda calendar,
|
||
inspect the rendered HTML, and probe JS memory
|
||
to see what data is exposed.
|
||
"""
|
||
|
||
from playwright.sync_api import sync_playwright
|
||
|
||
STATE_FILE = "medevio_storage.json"
|
||
AGENDA_URL = (
|
||
"https://my.medevio.cz/mudr-buzalkova/klinika/kalendar/agenda-dne/"
|
||
"?kalendar=144c4e12-347c-49ca-9ec0-8ca965a4470d&datum=2025-10-17"
|
||
)
|
||
|
||
def main():
|
||
with sync_playwright() as pw:
|
||
browser = pw.chromium.launch(headless=False, slow_mo=150)
|
||
context = browser.new_context(storage_state=STATE_FILE)
|
||
page = context.new_page()
|
||
|
||
print("🔗 Opening agenda-day calendar...")
|
||
page.goto(AGENDA_URL, wait_until="networkidle", timeout=90_000)
|
||
|
||
# -------- Check login --------
|
||
body = (page.text_content("body") or "").lower()
|
||
if any(x in body for x in ["přihlášení", "přihlásit", "sign in", "login"]):
|
||
raise SystemExit("❌ Not logged in – refresh medevio_storage.json.")
|
||
|
||
# -------- Wait for appointments to render --------
|
||
page.wait_for_timeout(4000)
|
||
|
||
# -------- Dump a few appointment blocks --------
|
||
blocks = page.locator("div.rbc-event-inner-content, div[data-testid='Reservation']").evaluate_all(
|
||
"(els) => els.map(e => e.outerHTML)"
|
||
)
|
||
print(f"\n✅ Found {len(blocks)} appointment blocks. Showing first 3:\n")
|
||
for snippet in blocks[:3]:
|
||
print(snippet)
|
||
print("-" * 80)
|
||
|
||
# -------- Explore window memory --------
|
||
print("\n🔍 Inspecting global JS variables...")
|
||
keys = page.evaluate("Object.keys(window)")
|
||
interesting = [k for k in keys if any(w in k.lower() for w in ["mede", "cal", "react", "state", "reserv"])]
|
||
print("Interesting keys:", interesting[:20])
|
||
|
||
for candidate in [
|
||
"window.__INITIAL_STATE__",
|
||
"window.__INITIAL_DATA__",
|
||
"window.__REACT_DEVTOOLS_GLOBAL_HOOK__",
|
||
"window.medevioCalendar",
|
||
"window.calendarStore",
|
||
"window.reduxStore",
|
||
"window.reactProps",
|
||
]:
|
||
try:
|
||
data = page.evaluate(f"JSON.stringify({candidate}, null, 2)")
|
||
if data and len(data) > 200:
|
||
print(f"\n===== {candidate} =====\n{data[:1000]}...\n")
|
||
except Exception:
|
||
pass
|
||
|
||
# -------- Optionally: listen for network requests while you click --------
|
||
def log_request(req):
|
||
url = req.url
|
||
if any(x in url for x in ["pozadavek", "request", "api"]):
|
||
print("📡", url)
|
||
|
||
page.on("request", log_request)
|
||
print("\n👉 Now click manually on a few agenda items to open their detail cards.")
|
||
print(" Any backend calls will appear below.\n")
|
||
|
||
page.wait_for_timeout(40000) # give yourself ~40s to click around
|
||
browser.close()
|
||
|
||
if __name__ == "__main__":
|
||
main()
|