import { newTarget, CDP, SAN } from '/tmp/cdp3.mjs'; const t=await newTarget('about:blank'); const c=await CDP.connect(t.webSocketDebuggerUrl); await c.send('Page.enable'); await c.send('Runtime.enable'); await c.send('Network.enable'); const caps=[]; c.on(m=>{ if(m.method==='Network.requestWillBeSent' && /shop/i.test(m.params.request.url)) caps.push({m:m.params.request.method,u:m.params.request.url.replace('https://www.dianxiaomi.com',''),p:String(m.params.request.postData||'').slice(0,150)}); }); await c.send('Page.navigate',{url:'https://www.dianxiaomi.com/web/ozonProduct/draft'}); await new Promise(r=>setTimeout(r,24000)); for(let i=0;i<8;i++){ const x=await c.evalJS(`(()=>{const v=[...document.querySelectorAll('.ant-modal')].filter(e=>e.offsetParent!==null); if(!v.length)return'n'; const b=v[0].querySelector('.ant-modal-close'); if(b){b.click();return'c';} return's';})()`); if(x==='n'){await new Promise(z=>setTimeout(z,900));continue;} if(x==='s')break; await new Promise(z=>setTimeout(z,1200)); } console.log(' ══ 含 shop 的接口 ══'); [...new Set(caps.map(x=>x.m+' '+x.u))].slice(0,10).forEach(x=>console.log(' '+x)); // 直接调最可能的那个拿映射 const r=await c.evalJS(`(async()=>{ const u=( ${JSON.stringify(caps.map(x=>x.u).filter(x=>/shop/i.test(x)))} )[0]; if(!u) return 'no-url'; const res=await fetch(u,{headers:{'X-Requested-With':'XMLHttpRequest'}}); const tx=await res.text(); return u+' -> '+tx.slice(0,900);})()`, true); console.log('\n ══ 店铺列表内容 ══'); console.log(' '+SAN(String(r)).slice(0,900)); c.close();