店小秘多平台铺货配方:7 平台建品脚本 + 静默拦截诊断法 + 项目状态

- TikTok/Shopee/速卖通/Walmart 各 46-47 条已在待发布
- Ozon 47 条已建、改价 40/47
- SHEIN 配方跑通第一条;Temu 差「预览图」一步
- 核心产出:MYJ.message.error 钩子诊断法(解开了三个平台的保存静默拦截)
- 含下一轮提示词 NEXT-ROUND-PROMPT.md
This commit is contained in:
admin9webs committed 2026-09-20 17:29:38 +08:00
commit f5720ad613
94 files changed
+21561

No files matched your search

+320
View File
@@ -0,0 +1,320 @@
{
"708420302844": {
"price": "36.45",
"readback": "API 回读: {\"n\":12,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
36.45,
36.45,
36.45
]
},
"547183997437": {
"price": "36.45",
"readback": "API 回读: {\"n\":1,\"prices\":[43.74],\"sales\":[36.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
36.45
]
},
"657617635303": {
"price": "36.45",
"readback": "API 回读: {\"n\":5,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
36.45,
36.45,
36.45
]
},
"641673262387": {
"price": "36.45",
"readback": "API 回读: {\"n\":32,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
36.45,
36.45,
36.45
]
},
"764423265986": {
"price": "34.0",
"readback": "{\"n\":2,\"prices\":[2.81,2.81],\"sales\":[2.81,2.81]}",
"save": "[]",
"ok": false,
"sales": [
2.81,
2.81
]
},
"735147938123": {
"price": "34.0",
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
34.0
]
},
"548459586741": {
"price": "34.0",
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
34.0
]
},
"610164857063": {
"price": "34.0",
"readback": "API 回读: {\"n\":10,\"prices\":[40.8,40.8,40.8],\"sales\":[34,34,34]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
34.0,
34.0,
34.0
]
},
"676236596821": {
"price": "34.0",
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
"save": "保存请求: [\"POST\"]",
"ok": true,
"sales": [
34.0
]
},
"866537106657": {
"price": "34.0",
"readback": "{\"n\":9,\"prices\":[1.14,1.27,1.27],\"sales\":[1.14,1.27,1.27]}",
"save": "[]",
"ok": false
},
"591994902720": {
"price": "31.91",
"readback": "API 回读: {\"n\":4,\"prices\":[38.3,38.3,38.3],\"sales\":[31.91,31.91,31.91]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"836512561982": {
"price": "30.2",
"readback": "API 回读: {\"n\":4,\"prices\":[36.24,36.24,36.24],\"sales\":[30.2,30.2,30.2]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"714492799386": {
"price": "28.36",
"readback": "API 回读: {\"n\":7,\"prices\":[34.04,34.04,34.04],\"sales\":[28.36,28.36,28.36]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"902440558099": {
"price": "27.27",
"readback": "API 回读: {\"n\":1,\"prices\":[32.73],\"sales\":[27.27]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"823838532886": {
"price": "27.0",
"readback": "API 回读: {\"n\":6,\"prices\":[32.4,32.4,32.4],\"sales\":[27,27,27]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"661190598139": {
"price": "26.64",
"readback": "API 回读: {\"n\":28,\"prices\":[31.97,31.97,31.97],\"sales\":[26.64,26.64,26.64]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"685456757807": {
"price": "26.64",
"readback": "API 回读: {\"n\":26,\"prices\":[31.97,31.97,31.97],\"sales\":[26.64,26.64,26.64]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"893592264148": {
"price": "26.45",
"readback": "API 回读: {\"n\":6,\"prices\":[31.74,31.74,31.74],\"sales\":[26.45,26.45,26.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"639409307567": {
"price": "25.82",
"readback": "{\"n\":2,\"prices\":[5.48,5.48],\"sales\":[5.48,5.48]}",
"save": "[]",
"ok": false
},
"896469995553": {
"price": "25.18",
"readback": "API 回读: {\"n\":2,\"prices\":[30.22,30.22],\"sales\":[25.18,25.18]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"719391062058": {
"price": "23.71",
"readback": "API 回读: {\"n\":6,\"prices\":[28.46,28.46,28.46],\"sales\":[23.71,23.71,23.71]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"698782391248": {
"price": "23.6",
"readback": "API 回读: {\"n\":1,\"prices\":[28.32],\"sales\":[23.6]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"823560564174": {
"price": "23.11",
"readback": "API 回读: {\"n\":9,\"prices\":[27.74,27.74,27.74],\"sales\":[23.11,23.11,23.11]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"857781294719": {
"price": "22.73",
"readback": "API 回读: {\"n\":3,\"prices\":[27.28,27.28,27.28],\"sales\":[22.73,22.73,22.73]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"707826905566": {
"price": "22.55",
"readback": "API 回读: {\"n\":4,\"prices\":[27.06,27.06,27.06],\"sales\":[22.55,22.55,22.55]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"1027332215847": {
"price": "22.55",
"readback": "API 回读: {\"n\":10,\"prices\":[27.06,27.06,27.06],\"sales\":[22.55,22.55,22.55]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"607330049419": {
"price": "22.24",
"readback": "API 回读: {\"n\":9,\"prices\":[26.69,26.69,26.69],\"sales\":[22.24,22.24,22.24]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"944470567338": {
"price": "22.18",
"readback": "API 回读: {\"n\":2,\"prices\":[26.62,26.62],\"sales\":[22.18,22.18]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"787261097583": {
"price": "22.18",
"readback": "{\"n\":12,\"prices\":[3.48,3.48,3.48],\"sales\":[3.48,3.48,3.48]}",
"save": "[]",
"ok": false
},
"694637537727": {
"price": "22.18",
"readback": "API 回读: {\"n\":5,\"prices\":[26.62,26.62,26.62],\"sales\":[22.18,22.18,22.18]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"621300323670": {
"price": "21.89",
"readback": "API 回读: {\"n\":1,\"prices\":[26.27],\"sales\":[21.89]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"682195499823": {
"price": "21.35",
"readback": "{\"n\":3,\"prices\":[3.01,3.01,3.01],\"sales\":[3.01,3.01,3.01]}",
"save": "[]",
"ok": false
},
"623011262210": {
"price": "21.27",
"readback": "API 回读: {\"n\":1,\"prices\":[25.53],\"sales\":[21.27]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"833753630925": {
"price": "21.27",
"readback": "API 回读: {\"n\":1,\"prices\":[25.53],\"sales\":[21.27]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"854003999648": {
"price": "21.15",
"readback": "API 回读: {\"n\":27,\"prices\":[25.38,25.38,25.38],\"sales\":[21.15,21.15,21.15]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"703822717997": {
"price": "20.77",
"readback": "API 回读: {\"n\":2,\"prices\":[24.93,24.93],\"sales\":[20.77,20.77]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"863524134410": {
"price": "20.73",
"readback": "API 回读: {\"n\":1,\"prices\":[24.88],\"sales\":[20.73]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"853414558425": {
"price": "20.45",
"readback": "API 回读: {\"n\":22,\"prices\":[24.54,24.54,24.54],\"sales\":[20.45,20.45,20.45]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"750271307455": {
"price": "20.18",
"readback": "API 回读: {\"n\":3,\"prices\":[24.22,24.22,24.22],\"sales\":[20.18,20.18,20.18]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"726442972676": {
"price": "20.09",
"readback": "API 回读: {\"n\":24,\"prices\":[24.11,24.11,24.11],\"sales\":[20.09,20.09,20.09]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"953869908708": {
"price": "19.91",
"readback": "API 回读: {\"n\":21,\"prices\":[23.9,23.9,23.9],\"sales\":[19.91,19.91,19.91]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"775057912118": {
"price": "19.84",
"readback": "API 回读: {\"n\":26,\"prices\":[23.81,23.81,23.81],\"sales\":[19.84,19.84,19.84]}",
"save": "保存请求: [\"POST\"]",
"ok": true
},
"863384503032": {
"price": "19.82",
"readback": "{\"n\":1,\"prices\":[2.21],\"sales\":[2.21]}",
"save": "[]",
"ok": false
},
"739147684759": {
"price": "19.64",
"readback": "{\"n\":3,\"prices\":[2.07,2.07,2.07],\"sales\":[2.07,2.07,2.07]}",
"save": "[]",
"ok": false
},
"774494945453": {
"price": "19.45",
"readback": "{\"n\":1,\"prices\":[23.34],\"sales\":[19.45]}",
"save": "[\"POST\"]",
"ok": true
},
"997450831819": {
"price": "18.07",
"readback": "{\"n\":1,\"prices\":[21.69],\"sales\":[18.07]}",
"save": "[\"POST\"]",
"ok": true
},
"601964534137": {
"price": "17.91",
"readback": "API 回读: {\"n\":5,\"prices\":[21.5,21.5,21.5],\"sales\":[17.91,17.91,17.91]}",
"save": "保存请求: [\"POST\"]",
"ok": true
}
}
+74
View File
@@ -0,0 +1,74 @@
[
{
"oid": "866537106657",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
},
{
"oid": "639409307567",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
},
{
"oid": "787261097583",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
},
{
"oid": "682195499823",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
},
{
"oid": "863384503032",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
},
{
"oid": "739147684759",
"red": [
"变种图片",
"请视频上传7天内完成产品发布",
"请填写SKU",
"请填写售价",
"包装尺寸请输入1~13500之间的数值!",
"重量请输入1~1000000之间的数值!",
"变种图不能为空"
]
}
]
+331
View File
@@ -0,0 +1,331 @@
[
{
"oid": "708420302844",
"pid": "184807701684297335",
"price": 36.45,
"w": 130,
"cost": 10.0
},
{
"oid": "547183997437",
"pid": "184807701684297331",
"price": 36.45,
"w": 130,
"cost": 10.0
},
{
"oid": "657617635303",
"pid": "184807701684297329",
"price": 36.45,
"w": 130,
"cost": 10.0
},
{
"oid": "641673262387",
"pid": "184807701684297327",
"price": 36.45,
"w": 130,
"cost": 10.0
},
{
"oid": "764423265986",
"pid": "184807701684297353",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "735147938123",
"pid": "184807701684297347",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "548459586741",
"pid": "184807701684297343",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "610164857063",
"pid": "184807701684297341",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "676236596821",
"pid": "184807701684297339",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "866537106657",
"pid": "184807701684297333",
"price": 34.0,
"w": 100,
"cost": 10.0
},
{
"oid": "591994902720",
"pid": "184807701684307653",
"price": 31.91,
"w": 130,
"cost": 7.5
},
{
"oid": "836512561982",
"pid": "184807701684307649",
"price": 30.2,
"w": 130,
"cost": 6.56
},
{
"oid": "714492799386",
"pid": "184807701684307651",
"price": 28.36,
"w": 100,
"cost": 6.9
},
{
"oid": "902440558099",
"pid": "184807701684308549",
"price": 27.27,
"w": 130,
"cost": 4.95
},
{
"oid": "823838532886",
"pid": "184807701684308547",
"price": 27.0,
"w": 130,
"cost": 4.8
},
{
"oid": "661190598139",
"pid": "184807701684297355",
"price": 26.64,
"w": 10,
"cost": 10.0
},
{
"oid": "685456757807",
"pid": "184807701684297349",
"price": 26.64,
"w": 10,
"cost": 10.0
},
{
"oid": "893592264148",
"pid": "184807701684308575",
"price": 26.45,
"w": 130,
"cost": 4.5
},
{
"oid": "639409307567",
"pid": "184807701684308551",
"price": 25.82,
"w": 100,
"cost": 5.5
},
{
"oid": "896469995553",
"pid": "184807701684308597",
"price": 25.18,
"w": 130,
"cost": 3.8
},
{
"oid": "719391062058",
"pid": "184807701684308589",
"price": 23.71,
"w": 130,
"cost": 2.99
},
{
"oid": "698782391248",
"pid": "184807701684308545",
"price": 23.6,
"w": 100,
"cost": 4.28
},
{
"oid": "823560564174",
"pid": "184807701684308537",
"price": 23.11,
"w": 130,
"cost": 2.66
},
{
"oid": "857781294719",
"pid": "184807701684308587",
"price": 22.73,
"w": 130,
"cost": 2.45
},
{
"oid": "707826905566",
"pid": "184807701684308543",
"price": 22.55,
"w": 100,
"cost": 3.7
},
{
"oid": "1027332215847",
"pid": "184807701684308541",
"price": 22.55,
"w": 100,
"cost": 3.7
},
{
"oid": "607330049419",
"pid": "184807701684308573",
"price": 22.24,
"w": 130,
"cost": 2.18
},
{
"oid": "944470567338",
"pid": "184807701684308595",
"price": 22.18,
"w": 100,
"cost": 3.5
},
{
"oid": "787261097583",
"pid": "184807701684308593",
"price": 22.18,
"w": 100,
"cost": 3.5
},
{
"oid": "694637537727",
"pid": "184807701684307645",
"price": 22.18,
"w": 130,
"cost": 2.15
},
{
"oid": "621300323670",
"pid": "184807701684308533",
"price": 21.89,
"w": 130,
"cost": 1.99
},
{
"oid": "682195499823",
"pid": "184807701684308539",
"price": 21.35,
"w": 100,
"cost": 3.04
},
{
"oid": "623011262210",
"pid": "184807701684307647",
"price": 21.27,
"w": 100,
"cost": 3.0
},
{
"oid": "833753630925",
"pid": "184807701684308591",
"price": 21.27,
"w": 100,
"cost": 3.0
},
{
"oid": "854003999648",
"pid": "184807701684308571",
"price": 21.15,
"w": 130,
"cost": 1.58
},
{
"oid": "703822717997",
"pid": "184807701684307641",
"price": 20.77,
"w": 130,
"cost": 1.375
},
{
"oid": "863524134410",
"pid": "184807701684307643",
"price": 20.73,
"w": 100,
"cost": 2.7
},
{
"oid": "853414558425",
"pid": "184807701684307655",
"price": 20.45,
"w": 130,
"cost": 1.2
},
{
"oid": "750271307455",
"pid": "184807701684308581",
"price": 20.18,
"w": 130,
"cost": 1.05
},
{
"oid": "726442972676",
"pid": "184807701684308579",
"price": 20.09,
"w": 130,
"cost": 1.0
},
{
"oid": "953869908708",
"pid": "184807701684307639",
"price": 19.91,
"w": 130,
"cost": 0.9
},
{
"oid": "775057912118",
"pid": "184807701684308577",
"price": 19.84,
"w": 130,
"cost": 0.86
},
{
"oid": "863384503032",
"pid": "184807701684308585",
"price": 19.82,
"w": 100,
"cost": 2.2
},
{
"oid": "739147684759",
"pid": "184807701684308535",
"price": 19.64,
"w": 100,
"cost": 2.1
},
{
"oid": "774494945453",
"pid": "184807701684308583",
"price": 19.45,
"w": 100,
"cost": 2.0
},
{
"oid": "997450831819",
"pid": "184807701684307657",
"price": 18.07,
"w": 100,
"cost": 1.24
},
{
"oid": "601964534137",
"pid": "184807701684308531",
"price": 17.91,
"w": 100,
"cost": 1.15
}
]
+100
View File
@@ -0,0 +1,100 @@
import { newTarget, CDP, SAN } from '/tmp/cdp3.mjs';
import fs from 'fs';
/* ── Ozon 改价(≤500g 档,售价 = 合计成本 ÷ (1 − 20% − 利润率))──
node ozprice_set.mjs <pid> <priceCNY> [dry]
dry = 只填不保存 */
const PID = process.argv[2];
const PRICE = process.argv[3];
const DRY = process.argv[4] === 'dry';
if (!PID || !PRICE) { console.log('用法: node ozprice_set.mjs <pid> <priceCNY> [dry]'); process.exit(1); }
const wait = ms => new Promise(z => setTimeout(z, ms));
const log = (...a) => console.log(' ', ...a);
const tl = await (await fetch('http://127.0.0.1:9223/json/list')).json();
let k = 0;
for (const t of tl.filter(x => x.type === 'page' && x.url.includes('ozonProduct/edit'))) { await fetch(`http://127.0.0.1:9223/json/close/${t.id}`).catch(() => {}); k++; }
if (k) { log(`清理残留编辑页 ${k} 个`); await wait(1100); }
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('Page.navigate', { url: `https://www.dianxiaomi.com/web/ozonProduct/edit?id=${PID}` });
await wait(32000);
for (let i = 0; i < 8; i++) {
const x = await c.evalJS(`(()=>{const ms=[...document.querySelectorAll('.ant-modal')].filter(e=>e.offsetParent!==null);
if(!ms.length)return'n'; ms.forEach(m=>{const cb=m.querySelector('.ant-modal-close'); if(cb&&cb.offsetParent!==null)cb.click();}); return 'c';})()`);
if (x === 'n') break; await wait(1000);
}
await wait(2000);
// 1. 找 SKU 表 + 价格列
const map = await c.evalJS(`(()=>{
const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
for(let ti=0;ti<tbls.length;ti++){
const ths=[...tbls[ti].querySelectorAll('th')].map(e=>(e.innerText||'').replace(/\\s+/g,' ').trim());
if(!ths.some(h=>/价格|售价|₽|RUB/i.test(h))) continue;
const rows=[...tbls[ti].querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
if(!rows.length) continue;
return JSON.stringify({ti, ths, rowCount: rows.length,
vals: rows.slice(0,3).map(tr=>[...tr.querySelectorAll('input')].map(i=>(i.value||'').slice(0,12)))});
}
return 'no-table';})()`);
log('SKU 表:', SAN(String(map)).slice(0, 500));
if (map === 'no-table') { log('❌ 找不到价格表'); process.exit(1); }
const M = JSON.parse(String(map));
const IDX_PRICE = M.ths.findIndex(h => /价格|售价|₽|RUB/i.test(h) && !/划线|原价|市场价|最低/i.test(h));
const IDX_OLD = M.ths.findIndex(h => /划线|原价|市场价/i.test(h));
const OLD_PRICE = (Math.ceil(Number(PRICE) * 1.2 * 100) / 100).toFixed(2);
log('价格列:', IDX_PRICE, JSON.stringify(M.ths[IDX_PRICE]), '| 原价列:', IDX_OLD, IDX_OLD >= 0 ? JSON.stringify(M.ths[IDX_OLD]) : '(无)', '→ 原价设为', OLD_PRICE);
// 2. 填价
const r = await c.evalJS(`(()=>{
const setV=(el,v)=>{ Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set.call(el,String(v));
el.dispatchEvent(new Event('input',{bubbles:true})); el.dispatchEvent(new Event('change',{bubbles:true})); el.dispatchEvent(new Event('blur',{bubbles:true})); };
const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
const tbl=tbls[${M.ti}]; if(!tbl)return'no-table';
const rows=[...tbl.querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
let n=0;
rows.forEach(tr=>{ const tds=[...tr.querySelectorAll('td')]; const td=tds[${IDX_PRICE}]; if(!td)return;
const inp=td.querySelector('input'); if(!inp)return; setV(inp,${JSON.stringify(PRICE)}); n++;
const od=tds[${IDX_OLD}]; if(od){ const oi=od.querySelector('input'); if(oi) setV(oi, ${JSON.stringify(OLD_PRICE)}); } });
return 'set:'+n+'/'+rows.length;})()`);
log('填价:', r);
await wait(2500);
// 3. 回读
const back = await c.evalJS(`(()=>{const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
const tbl=tbls[${M.ti}]; const rows=[...tbl.querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
return JSON.stringify(rows.slice(0,5).map(tr=>[...tr.querySelectorAll('td')].map(td=>{const i=td.querySelector('input'); return i?i.value:'';})));})()`);
log('回读:', SAN(String(back)).slice(0, 300));
if (DRY) { log('dry-run,不保存'); process.exit(0); }
// 4. 保存(优先「保存并移入待发布」,与 fixone3 一致)
await c.evalJS(`window.scrollTo(0,0)`); await wait(700);
const reqs = [];
c.on(m => { if (m.method === 'Network.requestWillBeSent') { const u = m.params.request.url; if (/ozonProduct\/add\.json/.test(u)) reqs.push(m.params.request.method); } });
await c.send('Network.enable').catch(()=>{});
const sv = await c.evalJS(`(()=>{const xs=[...document.querySelectorAll('button')].filter(e=>e.offsetParent!==null);
let x=xs.find(e=>/保存并移入待发布/.test((e.innerText||'').trim())); let tag='保存并移入待发布';
if(!x){ x=xs.find(e=>/^保\\s*存$/.test((e.innerText||'').trim())); tag='保存'; }
if(!x) return 'nf';
for(const ev of ['mousedown','mouseup','click']) x.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window})); return tag;})()`);
log('保存按钮:', sv);
await wait(13000);
await c.evalJS(`(()=>{const ms=[...document.querySelectorAll('.ant-modal')].filter(e=>e.offsetParent!==null);
for(const m of ms){const b=[...m.querySelectorAll('button')].find(x=>/确定|确认/.test(x.innerText||'')); if(b)b.click();} return 1;})()`);
await wait(5000);
log('保存请求:', JSON.stringify(reqs));
// 5. API 回读(权威)
const back2 = await c.evalJS(`(async()=>{const rr=await fetch('/api/ozonProduct/add.json?id=${PID}&_t='+Date.now(),{headers:{'X-Requested-With':'XMLHttpRequest','Cache-Control':'no-cache'}});
const tx=await rr.text(); if(!tx.startsWith('{'))return'(err)';
const p=(JSON.parse(tx).data||{}).product||{}; const vl=p.variantList||[];
return JSON.stringify({n:vl.length, prices:vl.slice(0,3).map(v=>v.price), sales:vl.slice(0,3).map(v=>v.salePrice)});})()`, true);
log('★ API 回读:', SAN(String(back2)).slice(0, 260));
process.exit(0);