114 lines
7.5 KiB
Markdown
114 lines
7.5 KiB
Markdown
# 下一轮提示词(整份复制给新会话即可接着干)
|
||
|
||
> ⚠️ **先读 `README.md` 和 `静默拦截诊断/HOOK.md`,再动手。**
|
||
> ⭐ **遇到「点了保存没反应」→ 第一件事是挂钩子,不要猜字段**(见下面第 2 节,全篇最重要的一段)。
|
||
|
||
---
|
||
|
||
## 1. 开工前先读这两个文件(别跳过)
|
||
|
||
| 文件 | 读它干什么 |
|
||
|---|---|
|
||
| **`README.md`**(仓库根) | 战果总表、各平台要点速查、通用技术事实、**十五条会重复踩的坑**、EAN-13 台账 |
|
||
| **`静默拦截诊断/HOOK.md`** | 保存静默拦截的完整诊断步骤 + 已定位的各平台被吞报错 |
|
||
|
||
仓库(Gitea):`http://192.168.9.206:3000/admin9webs/dianxiaomi-crossborder-playbook`
|
||
本机副本:`/home/admin9webs/gitea-push/dianxiaomi-crossborder-playbook/`
|
||
本文所有相对路径都以**仓库根目录**为准。
|
||
|
||
---
|
||
|
||
## 2. ⭐⭐ 最显眼的一条:遇到「点了保存没反应」,第一件事是挂钩子,不要猜字段 ⭐⭐
|
||
|
||
**为什么单独占一节**:这是整轮唯一一条**方法论级别**的收获。之前在 SHEIN 和 Temu 上
|
||
反复猜「到底哪个字段没填」,几十轮全部无效;挂上钩子后**两个平台的真报错一次全暴露**。
|
||
放在这个位置,是为了让新会话在**踩坑之前**就看见,而不是踩完才翻到。
|
||
|
||
**症状**:点「保存」→ **不发 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));
|
||
```
|
||
|
||
然后 **点保存 → 等 ~9 秒 → 读 `window.__cap`**,被吞掉的真实报错就在里面。
|
||
|
||
- 现成脚本:`静默拦截诊断/shhook.mjs`(SHEIN)、`静默拦截诊断/tmhook.mjs`(Temu);
|
||
批量脚本里用 `shein建品/sh_lib.mjs` 的 `installHook(c)` / `readHook(c)`。
|
||
- **「必填项扫描」不够**:扫 `.ant-form-item-required` 且为空,会漏掉**条件必填**
|
||
(Temu 的省份,只有「产地=中国」才出现)、**类目相关的文件字段**(速卖通的商品说明书)
|
||
和 **`.attr-label.required` 这类类目动态属性**(SHEIN 的「特征 Features」,不填只报
|
||
「产品信息中有错误,请检查」)。
|
||
|
||
---
|
||
|
||
## 3. 我在做什么
|
||
|
||
同一批 **48 个 1688 商品**铺到店小秘各平台的「待发布」。仓库是**可复用的配方 + 踩坑记录**,
|
||
不是一次性脚本堆积——每个平台一个目录,含配方脚本、输入数据、逐条结果。
|
||
|
||
## 4. 已完成
|
||
|
||
- TikTok 47 / Shopee 47 / 速卖通 47 / Walmart 46 / Ozon 47(改价 40/47)
|
||
- **SHEIN 40/40**(`shein建品/shbatch.mjs`,按 `shein_route.json` 分 4 家店;1 条因
|
||
①Shein-武汉九个网-箱包 报「商家无可用的发品额度」改挂 ②Shein-易世通达-箱包)
|
||
- **Temu 全托管 47**(`temu建品/tmbatch.mjs` 批量 46/46 + 手工首条),逐条结果在 `tm_done.json`
|
||
- **Joom 47**(`joom建品/jmbatch.mjs` 批量 46/47 + 手工首条;唯一没建的是全平台统一跳过的
|
||
无水印图商品 `601964534137`),逐条结果 `jm_done.json`、实际类目 `joom_route.json`;
|
||
关键发现是 **Joom 的商品数据落在 `smtChoiceAddBasicStore`**(与 aliChoice 共用 `smtChoice*` store)
|
||
|
||
## 5. 这轮要做的(按优先级)
|
||
|
||
0. **EAN 台账回 S03(最优先,硬约束)**
|
||
Temu 这 46 个号目前只落在 KVM-2 的 `temu建品/ean_temu_used.txt`
|
||
(pc 3447~3551,游标 `ean_cursor.json` → **3552**)。KVM-2 够不到 S03,
|
||
**需要在 S03 上把这份台账并进 `/root/ean_*.txt`**,之后从 3552 续号。
|
||
|
||
1. **继续铺剩余店小秘平台**(已侦察,直接用):
|
||
|
||
| 平台 | add 路由 | 店铺控件 | 类目控件 | store 家族 |
|
||
|---|---|---|---|---|
|
||
| Joom | `/web/joomProduct/add` | **复选框组** 85 个(全部+84 店) | 可搜索 `.ant-select` 平铺列表 | `smtChoice*` + `joom*`(已跑通) |
|
||
| aliChoice | `/web/smtChoice/add` | 下拉(实测 2 家) | 弹窗 | `smtChoice*`:标题 `.subject`、描述要写 **CKEditor setData**、保存要**两遍**(第二遍前补「物流属性=普货」)——**已跑通**;类目要先 `alcdry.mjs` dry 扫一遍(避开强制「商品说明书」的类目,结果写 `alc_route.json`),再 `alcbatch.mjs` 批量。剩余卡点:`请选择SKU分类`、类目属性 `材质/尺寸` 选了不生效 |
|
||
| Lazada | `/web/lazada/add` | 下拉(`Shehoney_MY/_SG/_TH/_ID/_PH/_VN` + `Nicegar_*`,第一家 `Shehoney_MY` shopId 3336185) | 弹窗(同 SHEIN 那套) | **没有 `lazada*` store**(旧结论「懒加载」已证伪:选完类目仍是空),要 dump 全部 store 找落点;类目已通(英文词+精确匹配);必填 = **品牌 + 税 + `KEY*` 类目属性族 + 产品图片** —— 侦察档 `lazada建品/RECIPE.md` |
|
||
| fruugo | `/web/fruugoProduct/add` | 下拉 | 弹窗 | `fruugoAdd*`(Common/Basic/Dxm/Product/Variation/Image/Describe/Form) |
|
||
|
||
(pddkj = Temu 全托管,已完成。)店铺一律取**自然序第一家**,SHEIN 那种锁品类的除外。
|
||
|
||
2. **妙手各平台**(店小秘全部完成后)
|
||
|
||
3. **可选重构**:`shein建品/sh_lib.mjs` + `sh_build.mjs`(`newPage`/`selectCategory`/
|
||
`fillRequiredSelects`/`installHook`)已是平台无关骨架,铺新平台先复用它,
|
||
别再从头写 `attach(url)`——同 URL 有多个标签时 `attach` 会抢到错的那个。
|
||
|
||
## 6. 硬约束
|
||
|
||
- 平台「首字母第一家店」规则(SHEIN 除外,它锁品类必须分店)
|
||
- 图片一律**外链 alicdn**,且必须**无水印**
|
||
- **EAN 台账在 S03 的 `/root/ean_*.txt`**,KVM-2 够不到。Walmart 已用 pc 3400~3446,
|
||
Temu 已用 pc 3447~3551(游标 3552)。**用了就要在 S03 落盘**,否则撞号。
|
||
|
||
## 7. 环境
|
||
|
||
- Chrome CDP **9223**,profile `/tmp/dxm7`;VNC `http://192.168.9.122:6097/vnc.html`
|
||
- CDP helper `/tmp/cdp3.mjs`(ESM:`newTarget`/`attach`/`CDP`/`SAN`,**不能用 require**)
|
||
⚠️ **它是 /tmp 下的临时文件,重启机器可能就没了**——仓库根目录留了备份 `cdp3.mjs`,
|
||
丢了就 `cp cdp3.mjs /tmp/cdp3.mjs` 再跑。
|
||
- 批量动辄 1 小时:`setsid nohup node xxx.mjs > xxx.log 2>&1 < /dev/null &`;
|
||
脚本自己往 `*_done.json` 写断点,失败直接带 pid 重跑(`node shbatch.mjs <pid>`)。
|
||
|
||
## 8. 机械差异,别互套(SHEIN ≠ Temu)
|
||
|
||
| | SHEIN | Temu 全托管 |
|
||
|---|---|---|
|
||
| 规格控件 | `.theme-select-box` 点主题 → `.sku-info-box` 里勾值 | 两个 `.theme-value-add` 块,`input[class*="!w-200"]` **手动输值 + 点「添加」**(直接改 store 无效) |
|
||
| 规格数量 | **最多 3 个**(颜色已占 1 个) | 颜色 + 尺码各一个值 |
|
||
| 图片 | store 直接吃外链数组 | 主图**必须满 5 张**;预览图**逐行**点 `.sku-image` → 引用产品轮播图 → 全部 → 选择 |
|
||
| 类目选择 | 弹窗搜索 → 点 `.search-result-item`(里面嵌 `<span class="f-red">`)→ **弹窗必须确认关掉** | 同一个弹窗,但**按最后一级路径精确匹配**(否则「口哨」会选到「狗口哨」) |
|