Files
dianxiaomi-crossborder-play…/NEXT-ROUND-PROMPT.md
T

7.4 KiB
Raw Blame History

下一轮提示词(整份复制给新会话即可接着干)

⚠️ 先读 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. 这轮要做的(按优先级)

  1. 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 续号。

  2. 继续铺剩余店小秘平台(已侦察,直接用):

    平台 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(选完类目才懒加载);必填含品牌(要求真实品牌库或「无品牌」)与税 —— 侦察档 lazada建品/RECIPE.md
    fruugo /web/fruugoProduct/add 下拉 弹窗 fruugoAdd*(Common/Basic/Dxm/Product/Variation/Image/Describe/Form)

    (pddkj = Temu 全托管,已完成。)店铺一律取自然序第一家,SHEIN 那种锁品类的除外。

  3. 妙手各平台(店小秘全部完成后)

  4. 可选重构: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;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">)→ 弹窗必须确认关掉 同一个弹窗,但按最后一级路径精确匹配(否则「口哨」会选到「狗口哨」)