41 lines
2.7 KiB
JavaScript
41 lines
2.7 KiB
JavaScript
import { wait, listPages, installHook, readHook } from '/home/admin9webs/shein建品/sh_lib.mjs';
|
|
import { CDP, SAN as S } from '/tmp/cdp3.mjs';
|
|
import { readFileSync, writeFileSync, appendFileSync } from 'fs';
|
|
const DIR='/home/admin9webs/temu建品';
|
|
const P = `document.querySelector('#app').__vue_app__.config.globalProperties.$pinia`;
|
|
const chk = pc => { const s='69803093'+String(pc).padStart(4,'0'); const d=[...s].map(Number);
|
|
return s + String((10 - d.reduce((a,x,i)=>a+x*(i%2===0?1:3),0)%10)%10); };
|
|
const cur = JSON.parse(readFileSync(`${DIR}/ean_cursor.json`,'utf8')).next;
|
|
const NEWEAN = chk(cur);
|
|
const tabs = (await listPages()).filter(t=>t.url.includes('/web/temu/edit'));
|
|
console.log('编辑页标签数:', tabs.length, '→ 用最后一个;换号 pc', cur, '=', NEWEAN);
|
|
const t = tabs[tabs.length-1];
|
|
const e = await CDP.connect(t.webSocketDebuggerUrl);
|
|
await e.send('Page.enable'); await e.send('Runtime.enable');
|
|
await wait(9000);
|
|
await installHook(e);
|
|
console.log('标题:', String(await e.evalJS(`(document.querySelector('input[name="productName"], .ant-input')||{}).value||''`)).slice(0,60));
|
|
const set = await e.evalJS(`(()=>{const p=${P};
|
|
const rows=p._s.get('temuAddSkuDataStore').$state.formState.skuDataList||[];
|
|
if(!rows.length) return 'no-rows';
|
|
const old=rows.map(r=>r.code).join(','); rows[0].code=${JSON.stringify(NEWEAN)};
|
|
return 'old='+old+' new='+rows[0].code;})()`);
|
|
console.log('改 EAN:', String(set));
|
|
await wait(2500);
|
|
await e.evalJS(`window.scrollTo(0,0)`); await wait(600);
|
|
await e.evalJS(`(()=>{const x=[...document.querySelectorAll('button')].filter(z=>z.offsetParent!==null).find(z=>/^\s*保存\s*$/.test((z.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(13000);
|
|
const info = await e.evalJS(`JSON.stringify([...document.querySelectorAll('.ant-modal')].filter(z=>z.offsetParent!==null).map(z=>(z.innerText||'').replace(/\s+/g,' ').trim().slice(0,130)))`);
|
|
console.log('保存:', S(String(info)).slice(0,240));
|
|
console.log('hook:', String(await readHook(e)).slice(-120));
|
|
if(/已保存|保存成功|待发布/.test(String(info))){
|
|
writeFileSync(`${DIR}/ean_cursor.json`, JSON.stringify({next:cur+1, at:new Date().toISOString()},null,1));
|
|
appendFileSync(`${DIR}/ean_temu_used.txt`, `764423265986-FIX\t["${NEWEAN}"]\t${new Date().toISOString()}\n`);
|
|
console.log('✓ 换号完成,cursor →', cur+1);
|
|
}
|
|
// 关掉多余的编辑页(含本次用的)
|
|
for (const x of (await listPages()).filter(p=>p.url.includes('/web/temu/edit'))) await fetch(`http://127.0.0.1:9223/json/close/${x.id}`).catch(()=>{});
|
|
console.log('已清理编辑页标签');
|
|
process.exit(0);
|