店小秘多平台铺货配方(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 扫描都抓不到。

解法——在点保存之前挂钩子:

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('<store>').$state
  • CDP helper:cdp3.mjs(newTarget/attach/CDP/SAN),ESM,不能用 require
  • 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 <pat> 会自杀 → 用 [.] 技巧(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
S
Description
1688→跨境多平台铺货配方:Ozon/TikTok/Shopee/Walmart/速卖通/SHEIN/Temu 建品脚本与踩坑记录
Readme
834 KiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 99.2%
Python 0.8%