Files
dianxiaomi-crossborder-play…/README.md
T

99 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 店小秘多平台铺货配方(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 家分品类 | 0 | 配方跑通第一条,40 条待批量 |
| Temu 全托管 | ①Alimingpro | **1** | 配方跑通首条(预览图解了),待批量 |
> `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建品/` | 店铺**锁品类**;类目要**两个规格**;**加规格会重建 SKU 行** |
| Temu | `temu建品/` | 类目 1038 个从 store 直读;规格是 `.theme-value-add`(与 SHEIN 不同构);**预览图要逐行点单元格** → 引用产品轮播图 → 全部 → 选择 |
## 通用技术事实
- 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` 单元格 → 引用产品轮播图 → 全部 → 选择)
## 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+**
- ⚠️ **必须在 S03 落盘**,否则下次续号会撞号
- 说明书 §1 的例子 `pc 1000 → 6980309310004` **是错的**,正确是 `6980309310007`