28 lines
1.3 KiB
Python
28 lines
1.3 KiB
Python
import json
|
|
import os
|
|
import time
|
|
|
|
from selenium import webdriver
|
|
from selenium.webdriver.chrome.options import Options
|
|
|
|
options = Options()
|
|
options.add_experimental_option("debuggerAddress", os.environ.get("WEHAGO_CHROME_DEBUGGER_ADDRESS", "127.0.0.1:9225"))
|
|
driver = webdriver.Chrome(options=options)
|
|
|
|
for typ in ["mouseMoved", "mousePressed", "mouseReleased"]:
|
|
driver.execute_cdp_cmd(
|
|
"Input.dispatchMouseEvent",
|
|
{"type": typ, "x": 130, "y": 188, "button": "left" if typ != "mouseMoved" else "none", "clickCount": 1},
|
|
)
|
|
time.sleep(0.8)
|
|
items = driver.execute_script(
|
|
r"""
|
|
return Array.from(document.querySelectorAll('input,button,[role=button],a,div')).map(el=>{
|
|
const r=el.getBoundingClientRect(); const st=getComputedStyle(el);
|
|
return {tag:el.tagName,id:el.id||'',cls:String(el.className||'').slice(0,80),text:(el.textContent||'').trim().slice(0,80),value:el.value||'',placeholder:el.getAttribute('placeholder')||'',title:el.getAttribute('title')||'',left:Math.round(r.left),top:Math.round(r.top),width:Math.round(r.width),height:Math.round(r.height),display:st.display,vis:st.visibility};
|
|
}).filter(x=>x.width>0&&x.height>0&&x.display!=='none'&&x.vis!=='hidden'&&x.top<400&&x.left<700).sort((a,b)=>(a.top-b.top)||(a.left-b.left)).slice(0,200);
|
|
"""
|
|
)
|
|
print(json.dumps(items, ensure_ascii=False, indent=2))
|
|
driver.quit()
|