import { attach } from '/tmp/cdp3.mjs'; const wait = ms => new Promise(z => setTimeout(z, ms)); const c = await attach('/web/sheinProduct/add') || await attach('dianxiaomi.com'); const reqs=[]; c.on(m=>{ if(m.method==='Network.requestWillBeSent'){const r=m.params.request; if(/shein/i.test(r.url)&&/\.json/.test(r.url)&&r.method==='POST') reqs.push(r.url.replace('https://www.dianxiaomi.com','')); }}); await c.send('Network.enable').catch(()=>{}); // 两个规格组各点一个 .sku-option const r = await c.evalJS(`(()=>{const boxes=[...document.querySelectorAll('.sku-info-box')].filter(e=>e.offsetParent!==null); const done=[]; boxes.forEach((b,i)=>{ const opts=[...b.querySelectorAll('.sku-option')].filter(e=>e.offsetParent!==null); if(!opts.length){done.push(i+':no-opt');return;} const inp=opts[0].querySelector('input[type=checkbox]'); if(inp&&inp.checked){done.push(i+':already');return;} const lab=opts[0].querySelector('label')||opts[0]; for(const ev of ['mousedown','mouseup','click']) lab.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window})); if(inp&&!inp.checked) inp.click(); done.push(i+':'+(opts[0].innerText||'').trim().slice(0,18)); }); return done.join(' | ');})()`); console.log('选规格值:', String(r)); await wait(7000); const st = await c.evalJS(`(()=>{const p=document.querySelector('#app').__vue_app__.config.globalProperties.$pinia; const a=JSON.parse(JSON.stringify(p._s.get('sheinSkuAttrStore').$state)); const d=JSON.parse(JSON.stringify(p._s.get('sheinSkuDataStore').$state)); return JSON.stringify({attrs:(a.formState.skuAttrs||[]).map(x=>({n:x.name, chosen:(x.options||[]).length})), skuRows:(d.formState.skuDataList||[]).length});})()`); console.log('状态:', String(st)); // 保存 await c.evalJS(`window.scrollTo(0,0)`); await wait(600); await c.evalJS(`(()=>{const x=[...document.querySelectorAll('button')].filter(e=>e.offsetParent!==null).find(e=>/^\\s*保存\\s*$/.test((e.innerText||'').trim())); if(x) for(const ev of ['mousedown','mouseup','click']) x.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window})); return 1;})()`); await wait(12000); const cap = await c.evalJS(`JSON.stringify(window.__cap||[])`); console.log('捕获:', String(cap).slice(0,300)); console.log('POST:', JSON.stringify([...new Set(reqs)].slice(0,3))); const t = await c.evalJS(`JSON.stringify([...document.querySelectorAll('.ant-message-notice,.ant-notification-notice,.ant-modal')].filter(e=>e.offsetParent!==null).map(e=>(e.innerText||'').replace(/\\s+/g,' ').trim().slice(0,130)).filter(Boolean).slice(0,3))`); console.log('提示:', String(t).slice(0,400)); process.exit(0);