r
This commit is contained in:
101
Medevio3CapturePatients01.py
Normal file
101
Medevio3CapturePatients01.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user