#fcb2414b-067b-4ca2-91b2-6c36a86d4cbb = Vladimir Buzalka #0210db7b-8fb0-4b47-b1d8-ec7a10849a63 = Vladko - testovací aplikace #tento kód otevře pacienta podle jeho UUID a založí mu požadavek chřipka a finito from pathlib import Path from datetime import datetime from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout import time STATE_FILE = Path("medevio_storage.json") PATIENT_UUID = "0210db7b-8fb0-4b47-b1d8-ec7a10849a63" PATIENT_URL = f"https://my.medevio.cz/mudr-buzalkova/klinika/pacienti?pacient={PATIENT_UUID}" MESSAGE_TEXT = "Dobrý den, vakcína proti chřipce je k dispozici, zítra (úterý 23.9) budeme očkovat od 13-17 hodin, prosím potvrďte jestli můžete přijít a jaký čas se Vám hodí." def savepage(name: str, page): """ Save the current HTML of a Playwright Page to U:\Dropbox\!!!Days\Downloads Z230\Pages\.html """ folder = Path(r"U:\Dropbox\!!!Days\Downloads Z230\Pages") folder.mkdir(parents=True, exist_ok=True) # ensure the folder exists # create sortable timestamp like 2025-09-19_14-05-33 ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") filepath = folder / f"{ts}_{name}.html" with filepath.open("w", encoding="utf-8") as f: f.write(page.content()) print(f"Saved page snapshot to {filepath}") def main(): with sync_playwright() as p: browser = p.chromium.launch(headless=False, slow_mo=200) context = browser.new_context(storage_state=str(STATE_FILE)) # ---- keep a stable reference to the patient card page ---- ptcard = context.new_page() ptcard.goto(PATIENT_URL, wait_until="networkidle") #saving ptcard1 # savepage("ptcard1",ptcard) ptcard.get_by_text("Historie požadavků").wait_for(timeout=15_000) # 1) Create new request on the patient card ptcard.get_by_role("button", name="Nový požadavek").click() ptcard.wait_for_timeout(300) # small settle # cursor is already in the "Začněte psát…" field ptcard.keyboard.type("očkování - chřipka") ptcard.locator("[role='option']", has_text="Očkování - Chřipka").first.click() ptcard.get_by_role("button", name="Vytvořit požadavek").click() #saving ptcard1 # savepage("ptcard2",ptcard) # 2) Ensure we are back on the patient card again # (some UIs rerender; either way we want a fresh list) try: ptcard.get_by_text("Historie požadavků").wait_for(timeout=7_000) except PWTimeout: # If for any reason we are not on the card, navigate back explicitly ptcard.goto(PATIENT_URL, wait_until="networkidle") ptcard.get_by_text("Historie požadavků").wait_for(timeout=10_000) # Optional: hard refresh to get the just-created request at the top ptcard.reload(wait_until="networkidle") ptcard.get_by_text("Historie požadavků").wait_for(timeout=10_000) time.sleep(5) # 3) Open the “Očkování – Chřipka …” request card by its H4 text # (click the whole card container, not just the heading) try: # wait until at least one request card is rendered ptcard.locator("div[data-testid='patient-request-item']").first.wait_for(timeout=10_000) # locate the specific card that contains the H4 with "Očkování - Chřipka" chripka_card = ptcard.locator("div[data-testid='patient-request-item']").filter( has=ptcard.locator("h4:has-text('Očkování - Chřipka')") ).first # ensure it's attached/visible then click it chripka_card.wait_for(timeout=10_000) chripka_card.click(timeout=5_000) except Exception as e: # Fallback: click the very first card on the list (newest) try: first_card = ptcard.locator("div[data-testid='patient-request-item']").first first_card.click(timeout=5_000) except Exception: # if even that fails, save snapshot for inspection and raise savepage("ptcard_click_fail", ptcard) raise # 4) Wait for request detail and send the message # We’re now on the detail page try: ptcard.wait_for_url("**/pozadavky?pozadavek=*", timeout=10_000) except PWTimeout: pass # URL may be SPA; rely on textarea presence ptcard.get_by_placeholder("Napište odpověď").wait_for(timeout=10_000) ptcard.get_by_placeholder("Napište odpověď").fill(MESSAGE_TEXT) sent = False for sel in ["button:has-text('Odeslat')", "button:has-text('Odeslat zprávu')", "button:has-text('Odeslat SMS')", "button:has-text('Odeslat do aplikace')"]: try: ptcard.click(sel, timeout=4000) sent = True break except Exception: continue if not sent: raise RuntimeError("Nepodařilo se najít/kliknout tlačítko Odeslat.") ptcard.wait_for_timeout(2000) print("✅ Požadavek vytvořen, otevřen a zpráva odeslána.") if __name__ == "__main__": main()