const seek = (el) => { const out={}; for(const k of Object.keys(el)) out[k.split('$')[0]]=k; return out; }; let sel=null; for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]')) if (el.offsetParent!==null && el.closest('fieldset') && (el.closest('fieldset').querySelector('legend')||{}).textContent==='忽略网络') sel=el; if(!sel) return {err:'no select'}; const keys = Object.keys(sel); const pk = keys.find(k=>k.startsWith('__reactProps$')); const fk = keys.find(k=>k.startsWith('__reactFiber$')); const p = sel[pk]; let fiber = sel[fk]; // climb fiber to find one with memoizedProps having options/onChange const found=[]; let f=fiber; for(let i=0;i<12&&f;i++){ const mp=f.memoizedProps; if(mp && typeof mp==='object'){ const ks=Object.keys(mp); if(ks.some(k=>/option|onChange|value|data|list/i.test(k))) found.push({i, type: String(f.type&&(f.type.displayName||f.type.name||f.type)).slice(0,40), keys: ks.slice(0,25)}); } f=f.return; } return {propKeys: p?Object.keys(p):null, found};