This commit is contained in:
2025-09-22 15:16:39 +02:00
parent 77cd56d5df
commit b7c9605b37
3 changed files with 521 additions and 0 deletions

125
07VytvorPozadavekChripka.py Normal file
View File

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