import { attach } from '/tmp/cdp3.mjs'; const wait = ms => new Promise(z => setTimeout(z, ms)); const c = await attach('/web/temu/add') || await attach('dianxiaomi.com'); await c.evalJS(`document.body.dispatchEvent(new MouseEvent('mousedown',{bubbles:true}));document.body.click();`); await wait(1200); const pos = JSON.parse(String(await c.evalJS(`(()=>{const it=[...document.querySelectorAll('.ant-form-item')].filter(e=>e.offsetParent!==null) .find(x=>{const l=x.querySelector('label'); return l&&/产品分类/.test(l.innerText||'');}); const el=it.querySelector('.ant-select-selector'); el.scrollIntoView({block:'center'}); const r=el.getBoundingClientRect(); return JSON.stringify([Math.round(r.x+r.width/2),Math.round(r.y+r.height/2)]);})()`))); console.log('坐标:', JSON.stringify(pos)); for(const t of ['mousePressed','mouseReleased']) await c.send('Input.dispatchMouseEvent',{type:t,x:pos[0],y:pos[1],button:'left',clickCount:1}); await wait(3500); const o = await c.evalJS(`(()=>{ const dds=[...document.querySelectorAll('.ant-select-dropdown')].filter(e=>e.offsetParent!==null); if(!dds.length) return 'no-dd'; const dd=dds[dds.length-1]; const opts=[...dd.querySelectorAll('.ant-select-item-option')]; const anyItems=[...dd.querySelectorAll('[class*=item]')].slice(0,5).map(e=>String(e.className).slice(0,40)); return JSON.stringify({n:opts.length, first:opts.slice(0,4).map(e=>JSON.stringify(e.innerText)), anyItems, txt:(dd.innerText||'').replace(/\\s+/g,' ').slice(0,200)});})()`); console.log('下拉:', String(o).slice(0,800)); process.exit(0);