const sleep = ms => new Promise(r => setTimeout(r, ms)); const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; }; const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t); if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; }; const leaf = (txt) => { for (const el of document.querySelectorAll('*')) if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; }; fire(leaf('布线')); await sleep(800); if(!fire(leaf('自动布线...'))) return {err:'no item'}; await sleep(2500); // dump modal const out = []; for (const m of document.querySelectorAll('[class*="modal"],[class*="Modal"],[class*="dialog"],[class*="Dialog"]')) { const t = (m.innerText||'').trim(); if (t.length > 20 && m.offsetParent !== null) out.push(t.slice(0, 1500)); } const inputs = []; for (const i of document.querySelectorAll('input,select,textarea')) { if (i.offsetParent === null) continue; inputs.push({type:i.type, val:i.value, checked:i.checked, ph:i.placeholder, name:i.name}); } const btns = []; for (const b of document.querySelectorAll('button')) if (b.offsetParent!==null) btns.push((b.innerText||'').trim()); return {modals: out.slice(-2), inputs: inputs.slice(0,40), btns: [...new Set(btns)].slice(0,30)};