7.2 KiB
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 名单即可。
下一轮的顺序建议
- 选店铺(
Shehoney_MY)→ 2. 选类目(弹窗)→ 3. dumplazada*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 轮补充
- 类目标签叫「分类」不叫「产品分类」 ——
sh_build.selectCategory原来只认/产品分类/, 在 Lazada 上直接no-item。已改成通用匹配:标签含「分类」且不含「店小秘」且该项里有选择分类(改动在shein建品/sh_build.mjs,对 SHEIN/Temu/aliChoice 同样生效)。 - 改完之后点击能打开了,但搜索结果是
no-path—— 说明 Lazada 的选择分类弹窗 不是 SHEIN/Temu 那个「左树右结果、.search-result-item」的结构。 下一轮第一步:点开选择分类,dump 弹窗 DOM(搜搜索分类名称输入框在不在、 结果项的 class 是什么),再决定是复用还是另写一个selectCategoryLazada。 - 因为类目一直没选上,
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(它不是结构不同,是没结果)。
下一轮的修法(二选一)
- 给 Lazada 单独一张中文→英文类目词表(最稳):
发圈→Hair Accessories、口哨→Toy Whistles、笔袋→Pencil Cases、保温午餐包→Lunch Bags、贴纸→Stickers等; - 从英文标题里取词(快但糙):
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 树是英文。
下一轮:
- 建一张词表(已确认
发圈 → Hair Accessories);其余按同法一条条试,很快; - 或直接从英文
title抽名词短语(Hair Ties/Whistle/Pencil Case/Lunch Bag); - 拿到英文词后,直接抄
alichoice建品/alcbatch.mjs的骨架(选店 → selectCategory → 填 store → 挂钩子保存), 差异只在于:Lazada 必填含品牌(要真实品牌或「无品牌」占位)和税。