import { attach, SAN } from '/tmp/cdp3.mjs'; const c = await attach('/web/ozonProduct/draft') || await attach('dianxiaomi.com'); await c.send('Runtime.enable'); const r = await c.evalJS(`(async()=>{ const rr = await fetch('/api/userInfo.json?_t='+Date.now(), {headers:{'X-Requested-With':'XMLHttpRequest'}}); const d = JSON.parse(await rr.text()).data; const out = {}; // shopMap 一个条目的完整结构 const sm = d.shopMap||{}; const firstKey = Object.keys(sm)[0]; out.shopMapSample = JSON.stringify(sm[firstKey]).slice(0, 400); // shopSmtTypeMap out.smtTypeMap = JSON.stringify(d.shopSmtTypeMap||{}).slice(0, 400); out.smtShopId = String(d.smtShopId); out.shopId = String(d.shopId); // platformPermission out.platformPermission = JSON.stringify(d.platformPermission||{}).slice(0, 500); // shopDataMap const sdm = d.shopDataMap||{}; const k2 = Object.keys(sdm)[0]; out.shopDataMapSample = k2? (k2+' => '+JSON.stringify(sdm[k2]).slice(0,300)) : '(空)'; // 按 platform 归类 const byPlat = {}; for (const [k,v] of Object.entries(sm)) { const p = (v&&(v.platform||v.platformName||v.type))||'?'; (byPlat[p]=byPlat[p]||[]).push((v&&(v.name||v.shopName))||k); } out.byPlatform = byPlat; return JSON.stringify(out); })()`, true); try{ const d = JSON.parse(String(r)); console.log(' smtShopId:', d.smtShopId, '| shopId:', d.shopId); console.log(); console.log(' shopMap 条目结构:'); console.log(' ', SAN(d.shopMapSample).slice(0,380)); console.log(' shopDataMap 样例:'); console.log(' ', SAN(d.shopDataMapSample).slice(0,300)); console.log(' shopSmtTypeMap:'); console.log(' ', SAN(d.smtTypeMap).slice(0,380)); console.log(' platformPermission:'); console.log(' ', SAN(d.platformPermission).slice(0,480)); console.log(); console.log(' ── 按平台归类 ──'); for (const [p, arr] of Object.entries(d.byPlatform||{})) console.log(' ' + p + ' (' + arr.length + '): ' + arr.slice(0,8).join(', ')); }catch(e){ console.log('err', e.message, SAN(String(r)).slice(0,700)); } c.close();