diff --git a/Medevio3CapturePatients01.py b/Medevio3CapturePatients01.py new file mode 100644 index 0000000..d1a2747 --- /dev/null +++ b/Medevio3CapturePatients01.py @@ -0,0 +1,101 @@ +import time +from playwright.sync_api import sync_playwright +import mysql.connector + +MYSQL_CFG = dict( + host="192.168.1.76", + port=3307, + user="root", + password="Vlado9674+", + database="medevio", +) + +# --- load 3 patients from DB --- +conn = mysql.connector.connect(**MYSQL_CFG) +with conn.cursor() as cur: + cur.execute(""" + SELECT rid, prijmeni, jmeno, rc + FROM patients_extracted + WHERE prijmeni IS NOT NULL and mamedevioucet is null + ORDER BY prijmeni ASC + LIMIT 3 + """) + rows = cur.fetchall() + if not rows: + raise RuntimeError("No entries found in patients_extracted") + +STATE_FILE = r"medevio_storage.json" +BASE_URL = "https://my.medevio.cz/mudr-buzalkova/klinika/pacienti" + +NOT_FOUND_SEL = "div[role='alert']:has-text('Pacient nebyl nalezen'), div:has-text('Pacient nebyl nalezen')" +DIALOG_SEL = "[role='dialog'], div.MuiDrawer-paper, div[aria-modal='true']" + +def close_dialog_if_open(page): + dlg = page.locator(DIALOG_SEL) + try: + if dlg.count(): + # Try a close button; if not, press Escape + try: + dlg.locator("button:has-text('Zavřít'), [aria-label='Zavřít'], [aria-label='Close'], [data-testid='CloseIcon']").first.click(timeout=1000) + except: + page.keyboard.press("Escape") + page.wait_for_selector(DIALOG_SEL, state="detached", timeout=1500) + except: + pass # best-effort close + +def main(): + with sync_playwright() as p: + browser = p.chromium.launch(headless=False) + context = browser.new_context(storage_state=STATE_FILE) + page = context.new_page() + + for rid, surname, name, rc in rows: + print(f"\nProcessing {surname} {name} {rc}") + + # 1️⃣ Navigation time + t0 = time.perf_counter() + page.goto(f"{BASE_URL}?pacient={rid}", wait_until="domcontentloaded") + # page.wait_for_load_state("networkidle") + t_nav = time.perf_counter() - t0 + print(f" ⏱️ page.goto + networkidle: {t_nav:.2f}s") + + # 2️⃣ Toast / dialog detection + t1 = time.perf_counter() + not_found = False + try: + page.wait_for_selector(NOT_FOUND_SEL, timeout=2500) + not_found = True + except: + pass + if not_found: + print(f" ⚠️ not-found toast detected after {time.perf_counter() - t1:.2f}s") + continue + + try: + page.wait_for_selector(DIALOG_SEL, timeout=8000) + except: + print(f" ⚠️ dialog not found (waited {time.perf_counter() - t1:.2f}s)") + continue + t_dialog = time.perf_counter() - t1 + print(f" ⏱️ toast/dialog detection: {t_dialog:.2f}s") + + # 3️⃣ Account check + DB update + t2 = time.perf_counter() + text = page.locator(DIALOG_SEL).first.inner_text() + has_account = 0 if "zatím nemá Medevio účet" in text else 1 + with conn.cursor() as c: + c.execute("UPDATE patients_extracted SET mamedevioucet=%s WHERE rid=%s", + (has_account, rid)) + conn.commit() + t_db = time.perf_counter() - t2 + print(f" ⏱️ DB update & text parse: {t_db:.2f}s") + + # 4️⃣ Optional pacing + t3 = time.perf_counter() + # time.sleep(0.5) + print(f" ⏱️ explicit sleep: {time.perf_counter() - t3:.2f}s") + + browser.close() + +if __name__ == "__main__": + main()