Files

39 lines
3.0 KiB
JavaScript

import { newPage, closePage, wait, installHook, readHook } from './sh_lib.mjs';
import { selectShop, selectCategory, fillTitle, addSpecs, pickSpecValues, fillSkuRows, fillSizeTable, fillImages } from './sh_build.mjs';
import { SAN as S } from '/tmp/cdp3.mjs';
import { readFileSync } from 'fs';
const P = `document.querySelector('#app').__vue_app__.config.globalProperties.$pinia`;
const pid='694637537727', kw='保温午餐包', shop=process.env.SHOP_OVERRIDE||'②Shein-易世通达-箱包';
const it=JSON.parse(readFileSync('/home/admin9webs/tiktok建品/tk_input.json','utf8'))[pid];
const c=await newPage('https://www.dianxiaomi.com/web/sheinProduct/add');
await wait(11000); await installHook(c);
console.log('shop:', await selectShop(c, shop));
console.log('cat:', await selectCategory(c, kw));
await fillTitle(c, it.title); await wait(1500);
console.log('specs:', await addSpecs(c));
console.log('vals:', await pickSpecValues(c));
await fillSkuRows(c,{prefix:'SHEIN',price:String(it.price_cny),supply:String(it.cost)}); await wait(2500);
console.log('size:', await fillSizeTable(c));
console.log('imgs:', await fillImages(c,(it.imgs||[]).slice(0,6)));
await wait(2000);
// 保存一次并抓全部证据
await c.evalJS(`window.scrollTo(0,0)`); await wait(500);
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 d = await c.evalJS(`(()=>{
const errItems=[...document.querySelectorAll('.ant-form-item-has-error')].map(x=>{const l=x.querySelector('label'); return (l?(l.innerText||''):'?').replace(/\\s+/g,' ').trim().slice(0,40);});
const ex=[...document.querySelectorAll('.ant-form-item-explain-error')].map(e=>(e.innerText||'').trim());
const reds=[]; document.querySelectorAll('*').forEach(el=>{ if(el.offsetParent===null||el.children.length)return;
const t=(el.innerText||'').trim(); if(!t||t.length>50)return; const s=getComputedStyle(el).color||'';
const m=s.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/); if(m&&+m[1]>150&&+m[2]<130&&+m[3]<130) reds.push(t); });
const emptyReq=[...document.querySelectorAll('.ant-form-item')].filter(e=>{
const l=e.querySelector('label'); if(!l||!/ant-form-item-required/.test(String(l.className))) return false;
const inp=e.querySelector('input,textarea'); if(!inp) return false;
return !inp.value && inp.offsetParent!==null;}).map(e=>(e.querySelector('label').innerText||'').replace(/\\s+/g,' ').trim().slice(0,34));
return JSON.stringify({errItems:[...new Set(errItems)], ex:[...new Set(ex)].slice(0,8), reds:[...new Set(reds)].slice(0,12), emptyReq:[...new Set(emptyReq)].slice(0,12)});})()`);
console.log('诊断:', S(String(d)).slice(0,1600));
console.log('hook:', String(await readHook(c)).slice(-300));
try{ await c.shot('/tmp/shein_diag.jpg'); console.log('shot ok'); }catch(e){}
await closePage(c); process.exit(0);