Files
medevio/07VytvorPozadavekChripka.py
2025-09-22 15:16:39 +02:00

126 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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\<name>.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
# Were 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()