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(`window.scrollTo(0,document.body.scrollHeight)`); await wait(2000); const o = await c.evalJS(`(()=>{ const items=[...document.querySelectorAll('.ant-form-item')].filter(e=>e.offsetParent!==null).map(x=>{ const l=x.querySelector('label'); const lab=l?(l.innerText||'').replace(/\\s+/g,' ').trim():''; const req=!!x.querySelector('.ant-form-item-required'); const inp=x.querySelector('input:not([type=hidden])'); const ta=x.querySelector('textarea'); const sel=x.querySelector('.ant-select-selection-item'); const r=x.getBoundingClientRect(); return {y:Math.round(r.y), s:(req?'* ':' ')+lab.slice(0,20)+' ['+(ta?'ta':(sel?'select':(inp?'input':'-')))+'] '+(sel?sel.innerText.trim():(inp?inp.value:(ta?ta.value:''))).slice(0,20)}; }).filter(x=>x.s.trim().length>4); const tables=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null).map(t=>({ th:[...t.querySelectorAll('th')].map(e=>(e.innerText||'').replace(/\\s+/g,' ').trim()).slice(0,12), rows:[...t.querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length).length})); return JSON.stringify({tables, low:items.filter(x=>x.y>0).slice(-14).map(x=>x.s)},null,1);})()`); console.log(String(o).slice(0,1400)); process.exit(0);