Files
AR-House/scripts/probe_civitek_case.py
2026-07-03 12:24:58 -04:00

93 lines
3.8 KiB
Python

"""Probe Civitek Case Search tab structure."""
from pathlib import Path
def probe():
from playwright.sync_api import sync_playwright
out_dir = Path(__file__).parent.parent / "_probe_out" / "civitek"
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_context().new_page()
# Walk to search
page.goto("https://www.civitekflorida.com/ocrs/county/27/")
page.wait_for_timeout(1500)
page.locator("button:has-text('Public')").first.click()
page.wait_for_timeout(2500)
page.locator("button:has-text('I Agree')").first.click()
page.wait_for_timeout(2500)
# Click "Case Search" tab (data-index=1)
print("[1] Clicking 'Case Search' tab...")
case_tab = page.locator("li[role='tab']:has-text('Case Search')").first
case_tab.click()
page.wait_for_timeout(2500)
(out_dir / "05_case_search_tab.html").write_text(page.content(), encoding="utf-8")
# Find new fields exposed under Case Search tab
print("\n[2] Inputs visible after switching tab:")
for inp in page.locator("input:visible, select:visible").all()[:30]:
try:
tag = inp.evaluate("el => el.tagName.toLowerCase()")
id_ = inp.get_attribute("id") or ""
name = inp.get_attribute("name") or ""
type_ = inp.get_attribute("type") or ""
placeholder = inp.get_attribute("placeholder") or ""
if type_ == "hidden":
continue
# Get label
label_for = ""
if id_:
lbl = page.locator(f"label[for='{id_}']").first
if lbl.count() > 0:
label_for = lbl.inner_text()[:50]
print(f" <{tag}> id={id_!r} type={type_!r} label={label_for!r}")
except Exception:
pass
# Test: search for a known case_number from our realauction inventory
# Most realauction cases are like "2024-CA-001234" or "23-2024-CA-001234"
# Try a generic test case number first to see the UI behavior
print("\n[3] Looking for case_number input field name...")
case_inputs = page.locator("input[id*='case' i], input[id*='Case'], input[name*='case' i]").all()
for inp in case_inputs[:5]:
try:
id_ = inp.get_attribute("id") or ""
name = inp.get_attribute("name") or ""
print(f" case-like input: id={id_!r} name={name!r}")
except Exception:
pass
# Submit empty to see validation errors
print("\n[4] Submitting empty Case Search to see required fields...")
search_btn = page.locator("button:has(.ui-button-text:text-is('Search'))").first
if search_btn.count() == 0:
search_btn = page.locator("button:has-text('Search')").first
try:
search_btn.click()
page.wait_for_timeout(2500)
except Exception as e:
print(f" click error: {e}")
# Capture error messages
print("\n[5] Validation messages after empty submit:")
for sel in [".ui-messages-error", ".ui-message-error", ".ui-message"]:
for m in page.locator(sel).all()[:5]:
try:
t = (m.inner_text() or "").strip()[:200]
if t:
print(f" [{sel}] {t}")
except Exception:
pass
(out_dir / "06_case_search_empty_submit.html").write_text(page.content(), encoding="utf-8")
page.screenshot(path=str(out_dir / "06_case_search.png"), full_page=True)
print(f"\n[OK] saved to {out_dir}/")
browser.close()
if __name__ == "__main__":
probe()