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 && el.offsetParent!==null) return el; return null; }; await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2'); await sleep(1600); const out = {}; fire(leaf('设计')); await sleep(900); out.opened = fire(leaf('从原理图导入变更')); await sleep(6000); // 找变更列表的滚动容器 let sc = null; for (const el of document.querySelectorAll('div')) if (el.scrollHeight > el.clientHeight + 20 && /移除元件|增加元件|修改|网络/.test(el.innerText || '')) if (!sc || el.innerText.length < sc.innerText.length) sc = el; const rows = new Set(); if (sc) { sc.scrollTop = 0; await sleep(300); for (let i = 0; i < 40; i++) { for (const line of (sc.innerText || '').split('\n')) { const t = line.trim(); if (t) rows.add(t); } if (sc.scrollTop + sc.clientHeight >= sc.scrollHeight - 2) break; sc.scrollTop += sc.clientHeight - 40; await sleep(220); } } out.rows = [...rows]; out.nrows = rows.size; // 可见按钮与复选框 out.buttons = [...document.querySelectorAll('button')].filter(b => b.offsetParent !== null).map(b => (b.innerText||'').trim()).filter(Boolean); out.checks = [...document.querySelectorAll('input[type=checkbox]')].filter(c => c.offsetParent !== null || true).map(c => { let l = c.closest('label'); return [(l ? l.innerText : (c.parentElement ? c.parentElement.innerText : '')).trim().slice(0,40), c.checked]; }); let dlg = null; for (const el of document.querySelectorAll('div')) { const x = el.innerText || ''; if (/导入/.test(x) && x.length > 40 && x.length < 6000 && (!dlg || x.length < dlg.length)) dlg = x; } out.dlgHead = dlg ? dlg.split('\n').slice(0, 12) : null; return out;