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 p=propsOf(t); if(p&&typeof p.onClick==='function'){p.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; }; await eda.dmt_EditorControl.openDocument('7e9415a16a909c51'); await sleep(1600); const out = {}; fire(leaf('设计')); await sleep(900); const it = leaf('从原理图导入变更'); if (!it) return {err: '菜单项没找到'}; out.fired = fire(it); await sleep(3500); // 抓对话框:找含「变更」或「导入」的最小容器 let best = null; for (const el of document.querySelectorAll('div')) { const x = el.innerText || ''; if (x.length > 20 && x.length < 12000 && /变更|导入/.test(x) && (!best || x.length < best.length)) best = x; } out.dialog = best ? best.split('\n').slice(0, 120) : null; out.buttons = [...document.querySelectorAll('button')].filter(b=>b.offsetParent!==null).map(b=>(b.innerText||'').trim()).filter(t=>t); return out;