来源信息
- 仓库
- southernspark-nfxh/aliexpress-auto-listing-skill
- 最近来源活动
- 2026年8月7日 13:38
- 检测到的 SKILL.md 语言
- 中文
- 星标
- 18
- 分支
- 3
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
文件资源管理器
51 个文件正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- aliexpress-store-ops
- description
- 速卖通店铺运营自动化 — 每日巡检/每周策略/商品上架/数据分析全流程。填入你的店铺名即可使用。
- domain
- ecommerce
- version
- 1.0.0
- modelVersion
- 1.0.0
- lastUpdated
- 2026-07-19
- compatibility
- Hermes Agent ≥ v1.0 | Claude Code ≥ v2.0 | Codex ≥ v1.0
- authors
- ["南方星火 SouthernSpark (小红书 @南方星火 SouthernSpark)"]
- license
- MIT
- lifecycle
- active
- triggers
- ["用户说\"帮我看看店铺\"、\"分析数据\"、\"上品\"、\"发新品\"、\"做策略\"","用户需要定时查看店铺运营状态","用户需要数据驱动的产品营销策略","用户说\"帮我在店小秘上架\"、\"采集1688\"、\"参考产品上架\"","用户打开1688页面和店小秘编辑页,需要帮忙填写产品信息","用户说\"先学习这个再填那个\"、\"照这个产品填\"(参考产品法)","用户打开多个浏览器标签页需要Agent在标签页间操作学习"]
# 速卖通运营工作流(填入你的店铺名即可使用)
## 🔴 铁律第一:上架操作期间禁止刷新/重载页面
**这是最高优先级规则,违反会导致数据全丢,必须重新操作。**
进入编辑页(`smt/edit?id=...`)后,在全部操作完成(保存并移入待发布)之前:
- ❌ **禁止**调用 `browser_navigate` 刷新页面
- ❌ **禁止**调用 `page.goto()` 重载编辑页
- ❌ **禁止**在编辑页和采集箱列表之间来回跳转
- ❌ **禁止**手动刷新浏览器标签页
- ❌ **禁止**关闭编辑页再重新打开
**唯一允许刷新的场景:** 页面死机/卡住/完全无法操作。
**正确的数据查看方式:** 用 `page.evaluate()` 在页面内读取 DOM 值,不要刷新页面。
**正确的数据保存方式:** 全部填完后一次性点「保存并移入待发布」。不要依赖「保存」按钮存草稿。
**如果必须查其他页面的数据(如 1688 参数):**
1. 在**新标签页**中打开(`ctx.new_page()` 或浏览器新标签)
2. **店小秘编辑页「来源URL → 访问」按钮也必须开新标签页** —— 绝对不能让该页面覆盖编辑页
3. 查完切回编辑页继续操作
4. 同一个编辑页的 Playwright 会话不中断
## 架构(永久 CDP 中继)
```
Windows Chrome (--remote-debugging-port=9222)
↕ Relay2.exe (0.0.0.0:9255 → 127.0.0.1:9222)
↕ 开机 VBS 自启 (Startup/hermes-chrome-relay.vbs)
Windows IP (172.24.48.x:9255)
↕ WSL chrome_relay.py (localhost:19223 → GW:9255)
```
## ⚠️ CDP 中继故障处理
详见 `references/cdp-recovery.md`
### 🚨 Gateway断连后重连铁律(2026-07-19新增)
**致命错误:** gateway重启/断连后,直接调用 `browser_navigate` 会**创建新标签页**,而不是连回已有的填好数据的标签页。这会导致之前所有未保存的填写工作"消失"(实际在另一个标签页中)。
**正确恢复步骤:**
```
1. browser_cdp → Target.getTargets # 列出所有标签页
2. 从返回的 targetInfos 中找到店小秘编辑页(title="店小秘--编辑速卖通产品")
3. 对每个编辑页 target: Runtime.evaluate 读取页面状态(标题、hash、bodyText片段)
4. 确认哪个标签页有已填数据(英文标题、已选属性值等)
5. 关闭空白/重复标签页: Target.closeTarget
6. 激活正确的标签页: Target.activateTarget
7. 此时 browser_snapshot 应该显示已填数据
```
**禁止操作:**
- ❌ 断连后直接 browser_navigate → 创建重复空白页 → 数据"丢失"
- ❌ 不检查 Target.getTargets 就操作
- ❌ 在已有填好数据的情况下重新填写(浪费时间)
## 模块化 Skill 体系(2026-07-19 全流程验证通过)\n\n店小秘编辑页拆分为独立模块,每个模块有对应 Skill。\n\n| 模块 | Skill | 状态 | 验证日期 |\n|------|-------|------|----------|\n| 1. 基本信息 | `dxm-basic-info` | ✅ | 07-19 |\n| 2. 店小秘信息 | 只读,跳过 | — | — |\n| 3. 属性信息 | `dxm-attributes` | ✅ | 07-19 |\n| 4. 产品图片 | `dxm-product-images` | ✅ | 07-19 |\n| 5. SKU定价 | `dxm-sku-pricing` | ✅ | 07-19 |\n| 6. PC端描述 | `dxm-pc-description` | ✅ | 07-19 |\n| 7. 包装 | `dxm-packaging` | ✅ | 07-19 |\n| 8. 模板 | `dxm-templates` | ✅ | 07-19 |\n| 9. 其他信息 | `dxm-other-info` | ✅ | 07-19 |\n| 总调度 | `dxm-listing-workflow` | ✅ 完整 | 07-19 |\n\n> **2026-07-19 全流程验证:** 产品\"折叠喝水神器\"从 Step 0 到 Step 9 全部走通。所有星号必填项已填。剩余已知问题:3个非星号下拉(电源/电压/动力)对所有automation免疫 → 跳过不纠缠(已记录 pitfall #14)。"\n\n## 上架流水线 — 分步操作流程
### 流程总览(15步)
```
Step 0 → 进入采集箱
Step 1 → 点「编辑」进编辑页
Step 2 → 标题改为英文
Step 3 → 选分类(弹窗树)
Step 4 → 开1688查参数(新标签页)
Step 5 → 填产品属性(红色星号必填)
Step 6 → 删除自定义属性
Step 7 → 产品图片选图
Step 7.5 → 批量改尺寸800×800
Step 7.6 → 图片翻译中文→英文
Step 7.7 → 营销图片一键生成
Step 7.8 → 颜色SKU:改英文名+图改尺寸+图翻译
Step 8 → SKU定价栏
Step 8.5 → PC端描述(引用模板 + 批量改图片尺寸)
Step 9 → 保存并移入待发布
```
详细操作指南(含代码片段、坐标、验证方法、已知坑点)全部放入以下参考文件:
### 参考文件清单
| 文件 | 内容 | 来源步骤 |
|:--|:--|:--|
| `references/cdp-recovery.md` | CDP 中继重启/故障恢复 | 架构 |
| `references/sku-table-fields.md` | SKU表HTML结构、select索引、颜色配置、字段映射 | Step 8 |
| `references/sku-variant-config.md` | VXE Table 结构、批量行vs单行、颜色配置 | Step 8 |
| `references/step-by-step-mode.md` | 步进模式、三击全选、交互规则 | 通用 |
| `references/batch-listing-workflow.md` | 30品/天上架流水线作业手册 | 通用 |
| `references/publishing-checklist.md` | 发布前检查清单 | Step 9 |
| `references/pc-description-template.md` | PC端描述所有操作:引用模板 + 批量改图片尺寸 + 图片翻译 | Step 8.5 |
| `scripts/detect-chinese-text.py` | OCR检测图片中是否含中文文案,配合图片翻译使用 | Step 8.5 |
| `references/attribute-fill-cdp.md` | 属性批量填写:CDP坐标两步法 + 狗携带用品属性值速查 | Step 5 |
| `references/playwright-coordinate-click.md` | Playwright mouse.click(x,y) 坐标法填 ant-select(比CDP更可靠触发Vue3) | Step 5 |
| `references/1688-json-extraction.md` | 1688嵌入JSON正则提取法 | Step 4 |
| `references/cdp-direct-operation.md` | browser_cdp 直连模式:弹窗拦截绕过 + 鼠标事件 + 截图 | 通用 |
| `references/sku-code-patterns.md` | SKU配置代码模式速查 | Step 8 |
### 各步骤核心规则速查
#### Step 0-1:进入采集箱 → 编辑页
- 左侧菜单「产品→采集箱→速卖通采集箱(N个)」
- 点击操作列「编辑」在新标签页打开编辑页
- URL格式:`https://www.dianxiaomi.com/web/smt/edit?id={product_id}`
- 进入编辑页后立即检查:标题是否含中文?分类是否有警告?必填属性是否为空?
#### Step 2:标题 → 英文
- 纯英文,128字符以内
- 使用 `nativeInputValueSetter` 操作
#### Step 3:选择分类
- 点击「选择分类」按钮 → 弹出4框树弹窗
- 按标题关键词找完全匹配类目,没有则选最接近
- 点击叶子节点选中,点底部「选择」确认
#### Step 4:1688 参数提取
- 用 `ctx.new_page()` 在新标签页打开 1688 URL
- 从嵌入JSON正则提取参数,详见 `references/1688-json-extraction.md`
- 从页面文本提取:货号(商品编码前缀)、重量、品牌、材质等
#### Step 5:产品属性
**⚠️ 2026-07-19 方法更新:JS强制显示dropdown+点击(替代CDP坐标法)**
详见 `dxm-attributes` skill(以该skill为准,它是属性的权威模块)。
核心方法:
```javascript
// 找含目标选项的dropdown → 强制显示 → 点击
dd.classList.remove('ant-select-dropdown-hidden');
dd.style.display = ''; dd.style.opacity = '1'; dd.style.pointerEvents = 'auto';
item.click(); item.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
```
**检测带星号字段:** 使用 `span.attr-label.required`(不是 `.ant-form-item-required`)。
**🚨 auto-complete 型字段填充方法(2026-07-19 攻克):** `ant-select-auto-complete` 型字段(如最大出餐量、材质)可用 **Playwright keyboard.type() + 点空白处blur(不提Enter)** 填充。详见 `dxm-attributes` skill pitfall #9。值存储在 `input.value` 而非 `.ant-select-selection-item`,验证时需分别检查。
**验证规则:** 只有**所有**带星号字段都填完才算通过。7/9 ≠ 完成,8/9 ≠ 完成。必须9/9。验证时注意 `ant-select-auto-complete` 型字段值在 `input.value` 中(不在 `.ant-select-selection-item`),需分别检查。
#### Step 6:删除自定义属性
- 属性信息 tab → 自定义属性区 → 批量操作 → 删除全部
#### Step 7:产品图片(含子步骤7.1-7.8)
详见 `references/sku-table-fields.md` 图片处理章节
#### Step 8:SKU定价栏
**术语定义:** SKU定价栏 = 零售价 + 货值 + 库存 + 长/宽/高 + 包装尺寸 + 是否原箱 + 物流属性 + 商品编码
**字段规则:**
| 字段 | 规则 |
|:--|:--|
| 零售价(CNY) | **= 货值。不等于1688成本价!** 按定价公式计算 |
| 货值(CNY) | **= 零售价**(两列填同一个数) |
| 库存 | 1688库存>2000封顶写2000,≤2000如实写 |
| 重量(kg) | 从1688提取 |
| 包装尺寸(cm) | 有数据则填,无跳过 |
| 是否原箱 | 原生select,设为「是」(value=1) |
| 物流属性 | 无电→普货;有电→内电 |
| 商品编码 | 一键生成,1688有货号填前缀 |
**定价公式:**
```
零售价 = 货值 = (1688成本价 + 国内运费¥5) × 1.02 ÷ [0.70 × (1 - 21% - 净利率)]
= (成本 + 5) × 1.02 ÷ 0.413 (净利率20%时)
```
- 国内运费固定:**¥5.00** | 退货率2% | 平台费率30% | 其他费率21%
- 净利率:起量/引流款=20%, 利润款=30%, 新品=20%
**操作序列:**
- **8a 批量填写:** 批量行填零售价/货值/库存/重量 → 点「批量填充」
- **8b 是否原箱:** Playwright `select_option('1')` 设为「是」
- **8c 物流属性:** 点「批量」→ 弹窗选 checkbox → 点确定
- **8d 商品编码:** 点「一键生成」→ 有货号填前缀 → 点设置
#### Step 8.5:PC端描述
详见 `references/pc-description-template.md`
- **⚠️ 两个「批量编辑图片」陷阱:** CKEditor 工具栏中有两个同名的「批量编辑图片」元素。CKEditor 内置 combo(类 `cke_combo`)点击后打开空面板——**不要点这个!** 真正的按钮在展开图片栏后的 `images-options` 区域(类 `ant-dropdown-trigger`)
- **展开图片栏(前置!):** 批量编辑图片按钮默认隐藏,必须先点击 CKEditor 工具栏最右侧的「展开图片栏」(`.cke_button__imagepaneltoggle`)使其可见。CKEditor 按钮用 `element.dispatchEvent(new MouseEvent('mousedown',{bubbles:true}))` + `.dispatchEvent(new MouseEvent('mouseup',{...}))` + `.dispatchEvent(new MouseEvent('click',{...}))` 触发
- **引用模板:** 描述信息 tab → CKEditor → 工具栏「引用模板」→ 选模板 → 选择
- **批量改图片尺寸精准步骤(用户2026-07-18验证的完整7步序列):**
1. **滚动到合适位置:** 将 `.images-options` 按钮滚到视口 y≈400-700 的位置(`window.scrollBy(0, r.top - 400)`)
2. **点开下拉:** 用 `Input.dispatchMouseEvent(mousePressed → mouseReleased)` 在按钮坐标上触发——JS `.click()` 对 antd 无效
3. **选「批量改图片尺寸」:** `.ant-dropdown-menu-item` textContent 匹配
4. **弹窗出现后→下拉1从「等比例调整」改为「自定义比例调整」:** 用 `Input.dispatchMouseEvent` 点击 `.ant-select-selector` 坐标,然后在打开的 `.ant-select-dropdown` 中点 `.ant-select-item`(textContent === '自定义比例调整')——默认是等比例,不切换则没有完整宽高输入
5. **图片宽填800:** 找到 `input[name=valueW]` 填 800(用 nativeValueSetter + dispatchEvent)
6. **选择全部:** 点 `.ant-checkbox-wrapper` 中 textContent 包含「选择全部」的 label
7. **生成JPG图片:** 点 button 中 textContent 包含「生成JPG」的按钮
⚠️ **铁律:以上7步必须严格按顺序,每步做完等用户确认看到变化,再走下一步。不许跳步,不许猜下一步。**
- **图片翻译操作流程(2026-07-18新增):** 与批量改尺寸同入口,dropdown 选「图片翻译」。详见 `references/pc-description-template.md`「PC端描述—图片翻译操作流程」
- **⚠️ 绝对定位偏移陷阱(高频坑):** ant-dropdown 和 ant-select-dropdown 使用绝对定位(`top: 5136-5612px`),当页面滚动到下方时菜单渲染在视口外。**解决方案:** 点按钮前先 scroll 使按钮在视口 y≈400-700(预留下拉空间),然后 mousePressed+mouseReleased 点击。验证:dropdown 的 `display!=='none'` 但 `getBoundingClientRect` 全零 → 还在视口外 → 重新 scroll 并重试
- **用户铁律:每一步操作要让用户看到变化。** 点完「批量编辑图片」后让用户确认看到下拉菜单→再点「批量改图片尺寸」→确认看到弹窗→再改下拉→确认看到自定义比例→填800→确认看到数→选全部→确认→生成JPG。**每做完一步汇报,等用户说"继续"或给下一步指令再动。** 不要自己一次性操作完所有步骤。
- **用户铁律:不要猜下一步。** 严格遵守用户说一步你做一步的顺序。"你要按照我的步骤来,不可以猜"——填800、选全部、生成JPG这三步必须由用户逐个指示,不能一次性批量做完。
#### Step 9:保存并移入待发布
所有字段填写完成后,点击页面顶部右侧的「保存并移入待发布」按钮。
**两种入口路径:**
- **路径 A(直接编辑):** 采集箱 → 编辑 → 填完 → 保存
- **路径 B(先移后改 — 推荐):** 采集箱 → 移入待发布(弹窗点「确 定」字中间有空格)→ 待发布列表 → 编辑 → 填完 → 保存
## 🖱️ CDP 三击全选
详见 `references/step-by-step-mode.md`
## 🧠 工作流智慧
### 🔴 铁律:上架流程未完成前,禁止启动新分析/调研任务
**用户2026-07-18明确纠正:**「为什么你突然去看谷歌趋势了?我们的上架流程还没有操作完。你错乱了,需要先完成上架工作流」
**规则:**
- 上架工作流(Step 0 → Step 9)进行中时,**绝对禁止**中途切换去做市场分析、谷歌趋势、竞品调研等任何非上架任务
- 即使上架过程中遇到失败/卡住(如翻译失败),汇报给用户等待指示,**不要自己决定「换一件事做」**
- 所有调研/分析/规划类任务,**只在没有进行中的上架流程时**才启动
- 用户说「算了,你换一件事做吧」= 跳过当前卡住的步骤继续上架流程,**不是**换项目去谷歌趋势
### 🚫 不要问「下一步做什么」——skill里已经全有了
**用户2026-07-18明确纠正:**「我不想再看到你问我任何问题。因为你总结的skill里面已经全部都有了。」
**规则:**
- Skill已经把15步流水线、每步的字段规则、已知坑点都写全了。执行时**不要停下来问「下一步做什么」「这个属性怎么填」**
- 有不确定的属性值?从1688参数推断最接近的(产地=浙江因义乌、品牌=NONE、材质=硅胶等),填完让用户检查
- 唯一需要问的情况:skill未覆盖的新步骤/新场景,或者同一操作3次失败(三振出局)
- **流畅执行 > 等待确认**。用户宁愿你填错他纠正,也不想一步一问
### 🚫 绝对禁止编造/曲解用户的话
**用户2026-07-18明确纠正:**「我确定我没有说过让你去做另外一件事情。你以后不许跟我撒谎,因为我会查看我们的聊天记录。」
- 用户说什么就是什么。不要把沉默/叹息/「算了」解读成自己想要的指令
- 每次说自己做某事的理由时,确保这句话真的出自用户之口——用户会查聊天记录核实
- 没听清就再问,不许编造「用户说过xxx」来合理化自己的行为
### 🚫 delegate_task 会覆盖 CDP 浏览器的标签页(2026-07-18新增)
**发现:** 代理任务(`delegate_task`)调用 `browser_navigate` 或 `browser.new_page()` 时,会在**用户 Chrome 的同一个 CDP 上下文**中创建新页面。如果 CDP 浏览器原本只有 2-3 个标签页(1688 + 店小秘编辑页),新页面可能覆盖编辑页标签,**导致编辑页丢失,全部未保存数据丢失**。
**规避规则:**
- 上架流程进行中,**禁止**调用 `delegate_task` 执行任何涉及浏览器操作的任务
- 必须用 `delegate_task` 时,确保任务只使用 `web_search` / `terminal` / `curl`,**不碰浏览器**
- 如果 CDP 编辑页已被覆盖,先确认用户看到了什么(用户可能已自己重新打开),然后用 CDP 导航回店小秘采集箱重新进入编辑页
- **安全替代方案:** 需要并行调研时,优先用 `web_search` + `curl` 或 `execute_code` 而非 `delegate_task`
## 🛠️ 编辑页丢失恢复流程(2026-07-18新增)
**场景:** 编辑页因意外关闭/标签页被覆盖/delegate_task干扰导致丢失,所有未保存数据可能丢失。
**恢复步骤:**
1. **检查 CDP 中是否还有编辑页 target**(通过 `Target.getTargets` 找 title="店小秘--编辑速卖通产品" 的 target)
2. **如果有编辑页 target**:直接用 `Runtime.evaluate` 评估页面状态,可能页面还在只是 Playwright 连接断开
3. **如果没有编辑页 target**(页面已关闭):重新导航到采集箱
- **采集箱 URL:** `https://www.dianxiaomi.com/web/smt/smtProductList/draft`
- **全托管采集箱:** `https://www.dianxiaomi.com/web/smtChoice/draft`
4. **找到产品并再次编辑:**
- 在表格中按产品标题文本找到对应行
- 点击该行的「编辑」链接(`<a>编辑</a>`)
- 注意:编辑链接会在**新标签页**中打开编辑页(`smt/edit?id={product_id}`)
5. **导航到所需 tab:** 编辑页左侧的 tab 用的是 `div.anchor-menu-item`(不是 `.ant-tabs-tab`),点击文本匹配的锚菜单项跳转
6. **检查数据是否持久化:** 之前填过的数据(标题/分类/SKU/PC描述等)可能已部分持久化到服务端。用 `page.evaluate` 读取各输入框的值判断哪些字段需要重填
7. **PC端描述通常持久化最好:** 本次验证中,页面关闭重开后 PC端描述内容(3278字符)仍然保留。但图片修改(改尺寸/翻译/营销图)一般需要重做
**⚠️ 重要:** 编辑页关闭后会丢失的数据:
- 产品图片的选择状态(需重新选主图)
- 营销图片(需重新一键生成)
- 图片翻译进度(需重新翻译)
- SKU图片的改尺寸状态
- 批量改图片尺寸后的图片
### 🚫 永远不要问用户"你要不要自己操作"
**用户铁律:**「你自己想办法」= 自己搞定。能填的全填上,最后汇报时可以说「这些字段CDP搞不定,你手动点一下」但不能问「你要不要自己操作」
### 🚫 三振出局原则
同一操作3次不成功 → 立即停手汇报。不要换第4、第5种方法继续试。
### 🎯 先出流程图再执行
涉及新工作流时:先做流程图 → 用户审核 → 确认后再执行。
### 📋 上架操作铁律
1. 编辑页绝不刷新/重开
2. 来源URL「访问」必须开新标签页
3. 查数据开新标签页,查完切回编辑页
4. 一条 Playwright 会话一条龙到底
### 🔴 CDP 操作可见性铁律(2026-07-18 重要更新)
**核心问题:** Playwright 通过 CDP 操作店小秘时,DOM 修改可能不被 Vue 3 的响应式系统捕获,导致用户页面看不到变化——即使代码执行成功。
**用户明确要求:「你以后都要显示出来,不然的话我不知道你进行到哪一步了」**
**用户明确要求:「你要按照我的步骤来,不可以猜」**——每步做完汇报,等用户指示下一步。不要一次性操作多步。
**解决方式(按优先级):**
1. **🥇 最高优先级:** 每次操作后**必须**让用户看到页面变化。不要在后台默默执行多步操作。用户说看不到立即停手,换真实交互方式重做,而不是换 JS 方式继续试。
2. **🥈 CDP Input.dispatchMouseEvent(antd 组件首选):** 对 ant-design 组件(`.ant-dropdown-trigger`, `.ant-select-selector` 等),JS programmatic `.click()` 无效。必须在浏览器_cdp 工具中用 `Input.dispatchMouseEvent(type='mousePressed', x, y)` + `Input.dispatchMouseEvent(type='mouseReleased', x, y)` 在按钮实际坐标上触发真实鼠标事件。
- ⚠️ **重要:点之前先滚动按钮到视口中部(y≈400-700)**,否则 antd 渲染的 dropdown 在视口外(绝对定位 top: 5612px 等),用户看不到下拉菜单
- 用 `window.scrollBy(0, r.top - 400)` 将按钮定位到视口上部
3. **🥉 Playwright page.mouse.click() + page.keyboard.type():** 用真实鼠标点击 + 键盘输入代替 JS setter/dispatchEvent。`page.mouse.click()` + `page.keyboard.type()` 能触发最完整的浏览器事件链。
4. **❌ 避免的写法(已被证明对 Vue 3 + antd 无效):**
在 GitHub 查看这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看