diff --git a/lazada建品/RECIPE.md b/lazada建品/RECIPE.md index b6b93f6..e8e62bf 100644 --- a/lazada建品/RECIPE.md +++ b/lazada建品/RECIPE.md @@ -32,3 +32,14 @@ - `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 懒加载的结论仍未验证。 diff --git a/shein建品/sh_build.mjs b/shein建品/sh_build.mjs index 99c6709..4ee97e1 100644 --- a/shein建品/sh_build.mjs +++ b/shein建品/sh_build.mjs @@ -33,7 +33,10 @@ export async function selectShop(c, shopName) { /** 选产品分类(弹窗搜索关键词 → 点第一个结果 → 确定) */ export async function selectCategory(c, kw, preferName) { const clicked = await c.evalJS(`(()=>{ - const it=[...document.querySelectorAll('.ant-form-item')].filter(e=>e.offsetParent!==null).find(e=>/产品分类/.test((e.querySelector('label')||{}).innerText||'')); + // 类目项标签各平台不一:SHEIN/Temu/aliChoice 叫「产品分类」,Lazada 叫「分类」;排除「店小秘分类」 + const it=[...document.querySelectorAll('.ant-form-item')].filter(e=>e.offsetParent!==null).find(e=>{ + const t=(e.querySelector('label')||{}).innerText||''; + return /分类/.test(t) && !/店小秘/.test(t) && !!/选择分类/.test(e.innerText||'');}); if(!it) return 'no-item'; const b=[...it.querySelectorAll('*')].find(e=>(e.innerText||'').trim()==='选择分类'&&e.children.length===0); if(!b) return 'no-btn';