# 店小秘多平台铺货配方(dianxiaomi crossborder playbook) 同一批 **48 个 1688 商品**铺到店小秘各平台的「待发布」。本仓库是**可复用的配方 + 踩坑记录**, 不是一次性脚本堆积——每个平台一个目录,含配方脚本、输入数据、逐条结果。 ## 战果 | 平台 | 店铺 | 待发布 | 状态 | |---|---|---|---| | TikTok | AutoMavenShop_MY | **47** | 完成 | | Shopee | Ljbgkj | **47** | 完成 | | 速卖通 | 4024039 | **47** | 完成(含清理 4 份重复) | | Walmart | Snowmountain | **46** | 完成 | | Ozon | Yejet | **47** | 已建;改价 40/47 | | SHEIN | 4 家分品类 | **40** | 完成(`shbatch.mjs` 自动批量;1 条因 ①箱包店发品额度用尽改挂 ②店) | | Temu 全托管 | ①Alimingpro | **47** | 完成(`tmbatch.mjs` 批量 46 + 手工首条;预览图已解) | > `601964534137`(遥控器保护套)18 张图全带水印、无干净图,所有平台统一跳过。 ## ⭐ 最重要的一节:保存静默拦截诊断法 **症状**:点「保存」→ 不发 POST、无界面提示、无 `.ant-form-item-has-error`。 **根因**:校验确实失败了,但报错被 **`MYJ.message.error` 吞掉**;而且报错是**层层递进**的 (修完 A 才显示 B),所以肉眼和 DOM 扫描都抓不到。 **解法**——在点保存**之前**挂钩子: ```js window.__cap = []; function wrap(o, n, l) { const f = o[n]; o[n] = function () { window.__cap.push(l + ': ' + [...arguments].map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ')); return f.apply(o, arguments); }; } ['error','warning','info','success'].forEach(k => wrap(MYJ.message, k, 'MYJ.' + k)); ['error','warning','info','success'].forEach(k => wrap(antd.message, k, 'antd.' + k)); ``` 点保存 → 读 `window.__cap`。 **为什么之前的「必填扫描」不够**:扫 `.ant-form-item-required` 且为空,漏掉两类—— **条件必填**(Temu 的省份,只有「产地=中国」才出现)和**类目相关的文件字段** (速卖通的商品说明书,有些类目强制、有些不强制)。 详见 `静默拦截诊断/HOOK.md`。 ## 各平台要点速查 | 平台 | 目录 | 最独特的一点 | |---|---|---| | Ozon | `ozon改价/` | 保存按钮是**「保存并移入待发布」**;价格是 **CNY**;改价必须同时抬高原价,否则报「售价需小于原价」 | | TikTok | `tiktok建品/` | 价格 **MYR**;图片 store 直接吃**外链数组** | | Shopee | `shopee建品/` | 用**单件模式**绕开变种;价格 **CNY**;列表字段是 `itemName` 不是 title | | Walmart | `walmart建品/` | 保存体是 **zip 的 multipart**;Brand 必须点「无品牌」;图片必须 **hover** 开下拉走「网络图片」 | | 速卖通 | `速卖通建品/` | `check_box` 属性值**必须是数组**;`idStr ≠ id` | | SHEIN | `shein建品/` | 店铺**锁品类**;**一个产品最多 3 个规格**(加满就停);**加规格会重建 SKU 行**;类目动态必填属性(`.attr-label.required`)不填只报「产品信息中有错误」 | | Temu | `temu建品/` | 类目 1038 个从 store 直读;规格是 `.theme-value-add`(**必须手动输值再点「添加」**,与 SHEIN 不同构);主图**必须满 5 张**;**预览图逐行点单元格** → 引用产品轮播图 → 全部 → 选择 | ## 通用技术事实 - Chrome CDP 端口 **9223**,profile `/tmp/dxm7` - **列表路由:`/draft` = 采集箱,`/offline` = 待发布**(找不到刚存的货,先确认进的是 `offline`) - Temu 全托管 `/web/temu/choiceTemuList/*`;Temu 半托管 POP `/web/popTemu/pageList/*` - Temu 全托管保存接口 `/api/pddkjProduct/add*.json`(拼多多跨境 = Temu 全托管) - 站点是 Vue3 + Pinia: `document.querySelector('#app').__vue_app__.config.globalProperties.$pinia._s.get('').$state` - CDP helper:`cdp3.mjs`(`newTarget`/`attach`/`closeAllTabs`/`CDP`/`SAN`),ESM,**不能用 require** - 平时跑在 `/tmp/cdp3.mjs`,**是 /tmp 下的临时文件,重启机器会丢** → 仓库根目录有备份, 丢了 `cp cdp3.mjs /tmp/cdp3.mjs` 即可 - ⚠️ 同一个 URL 开了多个标签时,`attach(url)` 会抢到**最后一个**匹配的标签。 批量脚本请用 `shein建品/sh_lib.mjs` 的 `newPage(url)`:按 target 直连,不会抢错 - VNC:`http://192.168.9.122:6097/vnc.html` 或 `:6100`(免密) ## 十五条会重复踩的坑 1. **保存静默拦截** → 挂钩子,别猜 2. **`idStr ≠ id`** → 大整数精度丢失,服务端操作一律用 `idStr` 3. **`!w-200` 不是合法 CSS 类选择器** → 用 `input[class*="!w-200"]` 4. **antd select 吃 DOM click**,但有些组件只吃真实鼠标事件 5. **hover 触发的下拉**点不开 → 先 `mouseMoved` 再 `click` 6. **加规格会重建 SKU 行** → 顺序「规格 → SKU → 尺码表」 7. **store 赋值后 UI 异步同步** → 当次校验可能仍失败,再点一次保存 8. **类目决定是否强制资质文件**(速卖通某些类目要上传说明书) 9. **SHEIN 店铺锁品类** → 不能用「首字母第一家店」 10. `pkill -f ` 会自杀 → 用 `[.]` 技巧(`pgrep -f 'foo[.]sh'`) 11. **SKU 表里「一格一图」的弹窗是单格的** → 勾「全部」只作用当前行,N 行要走 N 遍 (Temu 预览图就是这样:点 `.sku-image` 单元格 → 引用产品轮播图 → 全部 → 选择) 12. **选了类目别忘了确认弹窗关了** → 弹窗还开着时后面的点击全被挡,最后只会看到 「请上传预览图」这种牛头不对马嘴的报错(Temu 有 13 条就是这么挂的) 13. **SHEIN 规格上限 3 个** → 主题列表里看着能全点,点第 4 个就报「规格最多选择3个」 14. **类目动态必填属性**(`.attr-label.required`,如下拉、勾选组)不填不给具体提示, 只报「产品信息中有错误,请检查」→ 兜底:空的下拉选第一项、勾选组勾第一个 15. **EAN 游标必须落盘** → 计数器只存内存,换进程重跑就会从起点重发,必撞号 (Temu 第一轮就撞了一次,靠编辑页改号救回来) ## EAN-13 台账(湖北易千亿彩 · 69803093 段) - 结构:8 位前缀 `69803093` + 4 位产品码 + 1 位校验 - 校验位:`(10 - sum(d*(1 if i%2==0 else 3) for i,d in enumerate(d12)) % 10) % 10` (左起权重 1,3,1,3…;UPC-A 权重相反,别混用) - 台账唯一来源:**S03 主机 `/root/ean_*.txt`**(KVM-2 够不到) - 已用 3190,下一号 pc 3400 → `6980309334003` - **本批已分配**:Walmart pc **3400~3446**(见 `walmart建品/ean_69803093_3400-3446.txt`); Temu 全托管 pc **3447~3551**(46 条,逐条见 `temu建品/ean_temu_used.txt`; 游标 `temu建品/ean_cursor.json` → 下一号 pc **3552**) - ⚠️ **必须在 S03 落盘**,否则下次续号会撞号。Temu 这批目前只落在 KVM-2 (`temu建品/ean_temu_used.txt`),**还没回 S03** —— 下一轮开工第一件事就把它并进 `/root/ean_*.txt` - 说明书 §1 的例子 `pc 1000 → 6980309310004` **是错的**,正确是 `6980309310007`