From fb9486d0afd2ce173d6df1374bb22362a650661c Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Mon, 22 Sep 2025 10:45:44 +0200 Subject: [PATCH] r --- Medevio3.py | 42 ------ Medevio3CapturePatients.py | 111 ++++++++++++++++ Medevio5_ReadNamesFromKartoteka_html.py | 120 ++++++++++++++---- Medevio6 ReadPatientCards.py | 0 .../detail.html | 12 ++ .../detail.png | Bin 0 -> 34290 bytes 6 files changed, 217 insertions(+), 68 deletions(-) delete mode 100644 Medevio3.py create mode 100644 Medevio3CapturePatients.py create mode 100644 Medevio6 ReadPatientCards.py create mode 100644 capture_patient_0117c85c-630d-44c4-a5ca-dd9f3b28e25e/detail.html create mode 100644 capture_patient_0117c85c-630d-44c4-a5ca-dd9f3b28e25e/detail.png diff --git a/Medevio3.py b/Medevio3.py deleted file mode 100644 index 0df5e02..0000000 --- a/Medevio3.py +++ /dev/null @@ -1,42 +0,0 @@ -# save_patient_detail_page.py -from pathlib import Path -from playwright.sync_api import sync_playwright - -STATE_FILE = r"/medevio_storage.json" -BASE_URL = "https://my.medevio.cz/mudr-buzalkova/klinika/pacienti" -PATIENT_ID = "fcb2414b-067b-4ca2-91b2-6c36a86d4cbb" # <-- any valid patient UUID - -def main(): - out_dir = Path(f"capture_patient_{PATIENT_ID}") - out_dir.mkdir(exist_ok=True) - - html_path = out_dir / "detail.html" - screenshot_path = out_dir / "detail.png" - - with sync_playwright() as p: - browser = p.chromium.launch(headless=True) # set False if you want to watch - context = browser.new_context(storage_state=STATE_FILE) - page = context.new_page() - - # Open the detail directly - target_url = f"{BASE_URL}?pacient={PATIENT_ID}" - page.goto(target_url, wait_until="domcontentloaded") - - # Wait a bit for the detail drawer/dialog to render - try: - page.wait_for_selector("[role='dialog'], div.MuiDrawer-paper, div[aria-modal='true']", timeout=10000) - except: - print("Warning: did not detect a detail panel quickly") - - # Save raw HTML and screenshot - html_path.write_text(page.content(), encoding="utf-8") - page.screenshot(path=str(screenshot_path), full_page=True) - - browser.close() - - print("Saved:") - print(" -", html_path.resolve()) - print(" -", screenshot_path.resolve()) - -if __name__ == "__main__": - main() diff --git a/Medevio3CapturePatients.py b/Medevio3CapturePatients.py new file mode 100644 index 0000000..9163117 --- /dev/null +++ b/Medevio3CapturePatients.py @@ -0,0 +1,111 @@ +from playwright.sync_api import sync_playwright +import mysql.connector +import time + +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 + 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) + try: + context = browser.new_context(storage_state=STATE_FILE) + page = context.new_page() + + for rid, surname, name, rc in rows: + # 0) close any previous dialog to avoid stale matches + close_dialog_if_open(page) + + target_url = f"{BASE_URL}?pacient={rid}" + page.goto(target_url, wait_until="domcontentloaded") + page.wait_for_load_state("networkidle") + + # 1) Not-found toast? + try: + page.wait_for_selector(NOT_FOUND_SEL, timeout=3000) + print(f"{surname} {name} {rc} – ⚠️ pacient s RID {rid} nebyl nalezen, přeskočeno") + # (optional) set mamedevioucet=NULL for this rid here + continue + except: + pass + + # 2) Detail panel + try: + page.wait_for_selector(DIALOG_SEL, timeout=6000) + except: + print(f"⚠️ {surname} {name} {rc}: detailový panel se nenačetl, přeskočeno") + continue + + # 3) Verify dialog belongs to current patient (avoid stale dialog) + detail = page.locator(DIALOG_SEL).first + detail_text = detail.inner_text() + + if (surname not in detail_text) and (rc not in detail_text): + # Still looks wrong; give UI a moment and re-check once + page.wait_for_timeout(500) + detail_text = detail.inner_text() + if (surname not in detail_text) and (rc not in detail_text): + print(f"⚠️ {surname} {name} {rc}: detail neodpovídá (stará karta?), přeskočeno") + continue + + # 4) Check Medevio account text + if "zatím nemá Medevio účet" in detail_text: + has_account = 0 + print(f"{surname} {name} {rc} – ❌ zatím nemá Medevio účet") + else: + has_account = 1 + print(f"{surname} {name} {rc} – ✅ má Medevio účet") + + # Update DB by RID (or swap to rc if you prefer) + with conn.cursor() as c: + c.execute( + "UPDATE patients_extracted SET mamedevioucet = %s WHERE rid = %s", + (has_account, rid), + ) + conn.commit() + + time.sleep(0.5) # gentle pacing + + finally: + browser.close() + +if __name__ == "__main__": + main() diff --git a/Medevio5_ReadNamesFromKartoteka_html.py b/Medevio5_ReadNamesFromKartoteka_html.py index b931254..4b6ec99 100644 --- a/Medevio5_ReadNamesFromKartoteka_html.py +++ b/Medevio5_ReadNamesFromKartoteka_html.py @@ -1,10 +1,8 @@ import mysql.connector from bs4 import BeautifulSoup import re +import time - -# ---------- CONFIG ---------- -# MySQL connection settings (fill in) MYSQL_CFG = dict( host="192.168.1.76", port=3307, @@ -13,30 +11,100 @@ MYSQL_CFG = dict( database="medevio", ) -conn=mysql.connector.connect(**MYSQL_CFG) -cur=conn.cursor() -cur.execute("select html from kartoteka_html where 'fetched-at'=(SELECT MAX('fetched-at') FROM kartoteka_html)") -html=cur.fetchone() -html=html[0] +#Helper functions +def is_valid_rc(rc: str) -> bool: + """ + Very basic RC check: + – remove any slash + – must be 9 or 10 digits + """ + rc_clean = rc.replace("/", "") + return bool(re.fullmatch(r"\d{9,10}", rc_clean)) +conn = mysql.connector.connect(**MYSQL_CFG) -# html is the string containing the entire web page -soup = BeautifulSoup(html, "html.parser") +# --- get latest HTML (single-row result) --- +with conn.cursor() as cur: + cur.execute(""" + SELECT html + FROM kartoteka_html + where round=3 + ORDER BY `fetched-at` DESC + """) + rows = cur.fetchall() + if not rows: + raise RuntimeError("No HTML found in kartoteka_html") -# Find every
Načítání
\ No newline at end of file diff --git a/capture_patient_0117c85c-630d-44c4-a5ca-dd9f3b28e25e/detail.png b/capture_patient_0117c85c-630d-44c4-a5ca-dd9f3b28e25e/detail.png new file mode 100644 index 0000000000000000000000000000000000000000..51c5a85e90c601023447cf15888a4a9d155489ea GIT binary patch literal 34290 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 A&Hw-a literal 0 HcmV?d00001