This commit is contained in:
2025-10-18 15:21:32 +02:00
parent 7332ee0734
commit 3038098f4e
6 changed files with 369 additions and 1 deletions

View File

@@ -0,0 +1,80 @@
#!/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()