7.4 KiB
下一轮提示词(整份复制给新会话即可接着干)
⚠️ 先读
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 扫描都抓不到。
在点保存之前注入钩子:
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. 这轮要做的(按优先级)
-
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 续号。 -
继续铺剩余店小秘平台(已侦察,直接用):
平台 add 路由 店铺控件 类目控件 store 家族 Joom /web/joomProduct/add复选框组 85 个(全部+84 店) 可搜索 .ant-select平铺列表smtChoice*+joom*(已跑通)aliChoice /web/smtChoice/add下拉(实测 2 家) 弹窗 smtChoice*:标题.subject、描述要写 CKEditor setData、保存要两遍(第二遍前补「物流属性=普货」)——已跑通;类目要先alcdry.mjsdry 扫一遍(避开强制「商品说明书」的类目,结果写alc_route.json),再alcbatch.mjs批量。剩余卡点:请选择SKU分类、类目属性材质/尺寸选了不生效Lazada /web/lazada/add下拉( Shehoney_MY/_SG/_TH/_ID/_PH/_VN+Nicegar_*,第一家Shehoney_MYshopId 3336185)弹窗(同 SHEIN 那套) 选完店铺还没有 lazada*store(选完类目才懒加载);必填含品牌(要求真实品牌库或「无品牌」)与税 —— 侦察档lazada建品/RECIPE.mdfruugo /web/fruugoProduct/add下拉 弹窗 fruugoAdd*(Common/Basic/Dxm/Product/Variation/Image/Describe/Form)(pddkj = Temu 全托管,已完成。)店铺一律取自然序第一家,SHEIN 那种锁品类的除外。
-
妙手各平台(店小秘全部完成后)
-
可选重构:
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 34003446, Temu 已用 pc 34473551(游标 3552)。用了就要在 S03 落盘,否则撞号。
7. 环境
- Chrome CDP 9223,profile
/tmp/dxm7;VNChttp://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">)→ 弹窗必须确认关掉 |
同一个弹窗,但按最后一级路径精确匹配(否则「口哨」会选到「狗口哨」) |