Files
dianxiaomi-crossborder-play…/lazada建品/RECIPE.md
T

7.2 KiB
Raw Blame History

Lazada 建品侦察 — 未跑通,下一轮从这里接着做

路由:https://www.dianxiaomi.com/web/lazada/add 列表:/web/lazada/{draft=采集箱, offline=待发布}

已勘明(lz_probe1.mjs)

1. 店铺 = 下拉(按站点后缀分店)

第一家 = Shehoney_MY(shopId 3336185)。下拉前 10 项: Shehoney_MY / _SG / _TH / _ID / _PH / _VN、Nicegar_MY / _SG / _TH / _ID … —— 同一运营主体按站点拆店,「自然序第一家」= Shehoney_MY。

2. 类目

分类 ---- 请选择分类 ---- 选择分类(选择分类 按钮在),形态大概率与 SHEIN/Temu/aliChoice 同一套弹窗 → 直接用 shein建品/sh_build.mjs 的 selectCategory(c, kw, kw)。

3. 必填项(表单项标签带 *)

店铺 · 分类 · 产品标题(≤255) · 品牌 · 税 · 产品图片 非必填:店小秘分类、来源URL、包装内容(≤1000)、是否预售(白名单功能)、产品视频、产品描述。

⚠️ 品牌有坑:提示语写「请选择下拉提示框品牌或者填写 Lazada 后台已有品牌,如无品牌则填写…」 (原文被截断)——大概率要求品牌库里的真实品牌或填「无品牌」占位,和 Walmart 的「无品牌」同类。

4. store 家族

选完店铺时 pinia 里没有任何 lazada* store(stores:{})——说明 store 是选完类目后才懒加载注册的。下一轮选完类目再 dump 一次 store 名单即可。

下一轮的顺序建议

  1. 选店铺(Shehoney_MY)→ 2. 选类目(弹窗)→ 3. dump lazada* store 名单与字段落点 → 4. 标题/图片/品牌/税 → 5. 挂钩子再保存(Lazada 大概率也有一套层层递进的必填)

已知可复用

  • shein建品/sh_lib.mjs(newPage/closePage/installHook/readHook)
  • shein建品/sh_build.mjs:selectCategory、fillRequiredSelects、fillRequiredTextInputs、fillNativeSelects
  • 骨架直接抄 joom建品/jmbatch.mjs 或 alichoice建品/alcbatch.mjs

第 8 轮补充

  1. 类目标签叫「分类」不叫「产品分类」 —— sh_build.selectCategory 原来只认 /产品分类/, 在 Lazada 上直接 no-item。已改成通用匹配:标签含「分类」且不含「店小秘」且该项里有 选择分类(改动在 shein建品/sh_build.mjs,对 SHEIN/Temu/aliChoice 同样生效)。
  2. 改完之后点击能打开了,但搜索结果是 no-path —— 说明 Lazada 的 选择分类 弹窗 不是 SHEIN/Temu 那个「左树右结果、.search-result-item」的结构。 下一轮第一步:点开 选择分类,dump 弹窗 DOM(搜 搜索分类名称 输入框在不在、 结果项的 class 是什么),再决定是复用还是另写一个 selectCategoryLazada。
  3. 因为类目一直没选上,lazada* store 始终为空 —— store 懒加载的结论仍未验证。

第 9 轮:Lazada 选类目弹窗 = 同一套「选择类目」(只差结果项这一环)

点开 选择分类 后 dump 到:

  • 弹窗标题 选择类目,有 搜索 按钮和 input[placeholder="搜索分类名称"]
  • 左侧树用 .categories-item / .categories-item-name(顶层 46 项,英文类目名)
  • 右侧 未选择分类
  • 有 .ant-modal-close

结论:这就是 SHEIN/Temu/aliChoice 那套弹窗,selectCategory 理论上可直接复用; 上一轮 no-path 的原因尚未确认(候选:搜索按钮没点中、结果项不是 .search-result-item、 或该弹窗的搜索需要先选站点维度)。下一轮只需:输入关键词 → 点搜索 → dump 弹窗内 class 频次 (.search-result-item 在不在)→ 在不在就补一个 .categories-item 分支。

⚠️ 我这一轮拼验证脚本时把模板字符串切坏了(页面里报 SyntaxError: Unexpected token 'return'), 没跑出结果——这是我的脚本错误,不是平台问题。下一轮直接在这个 lz_cat.mjs 上小改即可 (它已经能稳定走到「打开弹窗」),别从零写。

第 10 轮:no-path 的真因 —— Lazada 类目树是英文,中文关键词搜不到

lz_cat3.mjs 跑完整条链路(选店 → 打开弹窗 → 输入 发圈 → 点 搜索)的结果:

时点 弹窗内容
打开时 标题 选择类目,底部按钮 ["搜索","选择","关闭"],左侧 .categories-item 树(46 项英文:Audio / Automotive / Bags and Travel / Beauty / Bedding & Bath / Cameras & Drones …)
输入 发圈 + 点搜索后 文本只剩 选择类目 搜索 初始类目 关闭;.search-result-item 0 条、.categories-item 0 条 → 搜索结果为空

结论:搜索确实执行了,只是中文关键词在英文类目树里匹配不到任何东西, 所以 selectCategory 一直返回 no-path(它不是结构不同,是没结果)。

下一轮的修法(二选一)

  1. 给 Lazada 单独一张中文→英文类目词表(最稳):发圈→Hair Accessories、 口哨→Toy Whistles、笔袋→Pencil Cases、保温午餐包→Lunch Bags、贴纸→Stickers 等;
  2. 从英文标题里取词(快但糙):tk_input.json 里每条都有英文 title, 取名词短语去搜(如 Hair Ties、Whistle、Pencil Case),搜不到再回退到词表。

搜到之后的结果项 class 仍需确认(这一轮没拿到非空样例)——但至少知道方向是对的: 换英文词就能出结果,selectCategory 的其余逻辑(点结果、关弹窗)可原样复用。

✅ 第 10 轮验证成功:Lazada 只要给英文词,selectCategory 就能原样复用

lz_cat4.mjs(只把关键词从 发圈 换成 Hair Accessories,其余一字未改):

输入: typed:Hair Accessories
按钮: ["搜索","选择","关闭"]
结果: search-result-item ×6, f-red ×6
sr[0] Beauty(美女)/Personal Care(个人护理)/Hair Care(洗护发用品)/…/Hair Accessories(发饰)
sr[1] Fashion Accessories(时尚饰品)/Accessories(配件)/Hair Accessories(发饰)
sr[2] Kids' Fashion(童装)/Baby & Kids' Accessories(…)/…
  • 结果项 class 就是 .search-result-item,最后一级在 <span class="f-red"> 里 → 和 SHEIN/Temu 完全同构,sh_build.selectCategory 的「去括注后按最后一级精确匹配」 逻辑可原样使用(Hair Accessories(发饰) 的 seg 就是 Hair Accessories,与关键词相等)
  • 类目路径本身中英并列(英文名 + 中文括注),所以匹配时要按「括号前」比较

因此 Lazada 只差一件事:中文 → 英文类目词

tk_input.json 里 cat_kw 是中文(发圈/口哨/笔袋…),Lazada 树是英文。 下一轮:

  1. 建一张词表(已确认 发圈 → Hair Accessories);其余按同法一条条试,很快;
  2. 或直接从英文 title 抽名词短语(Hair Ties / Whistle / Pencil Case / Lunch Bag);
  3. 拿到英文词后,直接抄 alichoice建品/alcbatch.mjs 的骨架(选店 → selectCategory → 填 store → 挂钩子保存), 差异只在于:Lazada 必填含品牌(要真实品牌或「无品牌」占位)和税。