with one click
aliexpress-store-ops
速卖通店铺运营自动化 — 每日巡检/每周策略/商品上架/数据分析全流程。填入你的店铺名即可使用。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
速卖通店铺运营自动化 — 每日巡检/每周策略/商品上架/数据分析全流程。填入你的店铺名即可使用。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| 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 | ["Rigi AI Commons (小红书 @瑞吉AI人民公社)"] |
| license | MIT |
| lifecycle | active |
| triggers | ["用户说\"帮我看看店铺\"、\"分析数据\"、\"上品\"、\"发新品\"、\"做策略\"","用户需要定时查看店铺运营状态","用户需要数据驱动的产品营销策略","用户说\"帮我在店小秘上架\"、\"采集1688\"、\"参考产品上架\"","用户打开1688页面和店小秘编辑页,需要帮忙填写产品信息","用户说\"先学习这个再填那个\"、\"照这个产品填\"(参考产品法)","用户打开多个浏览器标签页需要Agent在标签页间操作学习"] |
这是最高优先级规则,违反会导致数据全丢,必须重新操作。
进入编辑页(smt/edit?id=...)后,在全部操作完成(保存并移入待发布)之前:
browser_navigate 刷新页面page.goto() 重载编辑页唯一允许刷新的场景: 页面死机/卡住/完全无法操作。
正确的数据查看方式: 用 page.evaluate() 在页面内读取 DOM 值,不要刷新页面。
正确的数据保存方式: 全部填完后一次性点「保存并移入待发布」。不要依赖「保存」按钮存草稿。
如果必须查其他页面的数据(如 1688 参数):
ctx.new_page() 或浏览器新标签)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)
详见 references/cdp-recovery.md
致命错误: 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 应该显示已填数据
禁止操作:
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## 上架流水线 — 分步操作流程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 |
https://www.dianxiaomi.com/web/smt/edit?id={product_id}nativeInputValueSetter 操作ctx.new_page() 在新标签页打开 1688 URLreferences/1688-json-extraction.md⚠️ 2026-07-19 方法更新:JS强制显示dropdown+点击(替代CDP坐标法)
详见 dxm-attributes skill(以该skill为准,它是属性的权威模块)。
核心方法:
// 找含目标选项的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),需分别检查。
详见 references/sku-table-fields.md 图片处理章节
术语定义: 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%时)
操作序列:
select_option('1') 设为「是」详见 references/pc-description-template.md
cke_combo)点击后打开空面板——不要点这个! 真正的按钮在展开图片栏后的 images-options 区域(类 ant-dropdown-trigger).cke_button__imagepaneltoggle)使其可见。CKEditor 按钮用 element.dispatchEvent(new MouseEvent('mousedown',{bubbles:true})) + .dispatchEvent(new MouseEvent('mouseup',{...})) + .dispatchEvent(new MouseEvent('click',{...})) 触发.images-options 按钮滚到视口 y≈400-700 的位置(window.scrollBy(0, r.top - 400))Input.dispatchMouseEvent(mousePressed → mouseReleased) 在按钮坐标上触发——JS .click() 对 antd 无效.ant-dropdown-menu-item textContent 匹配Input.dispatchMouseEvent 点击 .ant-select-selector 坐标,然后在打开的 .ant-select-dropdown 中点 .ant-select-item(textContent === '自定义比例调整')——默认是等比例,不切换则没有完整宽高输入input[name=valueW] 填 800(用 nativeValueSetter + dispatchEvent).ant-checkbox-wrapper 中 textContent 包含「选择全部」的 labelreferences/pc-description-template.md「PC端描述—图片翻译操作流程」top: 5136-5612px),当页面滚动到下方时菜单渲染在视口外。解决方案: 点按钮前先 scroll 使按钮在视口 y≈400-700(预留下拉空间),然后 mousePressed+mouseReleased 点击。验证:dropdown 的 display!=='none' 但 getBoundingClientRect 全零 → 还在视口外 → 重新 scroll 并重试所有字段填写完成后,点击页面顶部右侧的「保存并移入待发布」按钮。
两种入口路径:
详见 references/step-by-step-mode.md
用户2026-07-18明确纠正:「为什么你突然去看谷歌趋势了?我们的上架流程还没有操作完。你错乱了,需要先完成上架工作流」
规则:
用户2026-07-18明确纠正:「我不想再看到你问我任何问题。因为你总结的skill里面已经全部都有了。」
规则:
用户2026-07-18明确纠正:「我确定我没有说过让你去做另外一件事情。你以后不许跟我撒谎,因为我会查看我们的聊天记录。」
发现: 代理任务(delegate_task)调用 browser_navigate 或 browser.new_page() 时,会在用户 Chrome 的同一个 CDP 上下文中创建新页面。如果 CDP 浏览器原本只有 2-3 个标签页(1688 + 店小秘编辑页),新页面可能覆盖编辑页标签,导致编辑页丢失,全部未保存数据丢失。
规避规则:
delegate_task 执行任何涉及浏览器操作的任务delegate_task 时,确保任务只使用 web_search / terminal / curl,不碰浏览器web_search + curl 或 execute_code 而非 delegate_task场景: 编辑页因意外关闭/标签页被覆盖/delegate_task干扰导致丢失,所有未保存数据可能丢失。
恢复步骤:
Target.getTargets 找 title="店小秘--编辑速卖通产品" 的 target)Runtime.evaluate 评估页面状态,可能页面还在只是 Playwright 连接断开https://www.dianxiaomi.com/web/smt/smtProductList/drafthttps://www.dianxiaomi.com/web/smtChoice/draft<a>编辑</a>)smt/edit?id={product_id})div.anchor-menu-item(不是 .ant-tabs-tab),点击文本匹配的锚菜单项跳转page.evaluate 读取各输入框的值判断哪些字段需要重填⚠️ 重要: 编辑页关闭后会丢失的数据:
用户铁律:「你自己想办法」= 自己搞定。能填的全填上,最后汇报时可以说「这些字段CDP搞不定,你手动点一下」但不能问「你要不要自己操作」
同一操作3次不成功 → 立即停手汇报。不要换第4、第5种方法继续试。
涉及新工作流时:先做流程图 → 用户审核 → 确认后再执行。
核心问题: Playwright 通过 CDP 操作店小秘时,DOM 修改可能不被 Vue 3 的响应式系统捕获,导致用户页面看不到变化——即使代码执行成功。
用户明确要求:「你以后都要显示出来,不然的话我不知道你进行到哪一步了」
用户明确要求:「你要按照我的步骤来,不可以猜」——每步做完汇报,等用户指示下一步。不要一次性操作多步。
解决方式(按优先级):
🥇 最高优先级: 每次操作后必须让用户看到页面变化。不要在后台默默执行多步操作。用户说看不到立即停手,换真实交互方式重做,而不是换 JS 方式继续试。
🥈 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) 在按钮实际坐标上触发真实鼠标事件。
window.scrollBy(0, r.top - 400) 将按钮定位到视口上部🥉 Playwright page.mouse.click() + page.keyboard.type(): 用真实鼠标点击 + 键盘输入代替 JS setter/dispatchEvent。page.mouse.click() + page.keyboard.type() 能触发最完整的浏览器事件链。
❌ 避免的写法(已被证明对 Vue 3 + antd 无效):
element.click() (JS programmatic)Runtime.evaluate 里的 .dispatchEvent(new Event(...))nativeInputValueSetter + dispatchEvent('input')DOM.setFileInputFiles(Vue 重渲染清除文件)验证方法: 每次 click 后检查弹出的 ant-dropdown/ant-select-dropdown 的 getBoundingClientRect()。如果 display 为 block 但 rect 为空数组(全零),说明 dropdown 被渲染到视口外——scroll 重试。
零售价 = 货值 = (1688成本价 + 国内运费¥5) × 1.02 ÷ [0.70 × (1 - 21% - 净利率)]
| 产品类型 | 物流属性 |
|---|---|
| 无电(硅胶碗、普通日用品) | 普货 |
| USB充电(风扇、净化器) | 内电→非纽扣锂离子电池 |
| 纽扣电池(LED灯) | 内电→纽扣式锂电池 |
| 干电池(遥控器) | 内电→干电池 |
| 充电宝/电池盒 | 内电→非纽扣锂离子电池 |
btn.innerText.trim() === '确 定' 匹配,不要 trim 后等于 '确定'(匹配失败)<select>,不用 ant-select,JS 改 value 可能不被 Vue 捕获 → 用 Playwright select_option().ant-checkbox-wrapper 精确匹配cke_combo(CKEditor原生combo,打开空面板)和 images-options 内的 ant-dropdown-trigger(真正的菜单)。必须在展开图片栏后,点击 images-options 区的按钮。误点cke_combo则用Esc关闭空面板style: top: 5612px 绝对定位,可能落在视口外。正确做法: 用 getBoundingClientRect() 找到按钮坐标,window.scrollBy(0, r.top - 400) 将按钮移到视口中部(y≈400-700),然后用 Input.dispatchMouseEvent(type='mousePressed', x, y) + (type='mouseReleased', x, y) 在按钮坐标处触发真实鼠标事件。验证:dropdown display!=='none' 但 rect 全零 → 仍在视口外 → 重新scroll。ant-select-selector(弹窗内下拉)同理需要坐标级 mousePressed+mouseReleased。page.evaluate() 改DOM或JS dispatchEvent可能不被Vue捕获。必须用真实鼠标交互。已验证有效的CDP click序列: ①获取按钮 getBoundingClientRect 坐标 ②window.scrollBy(0, r.top - 400) 将按钮移到视口中部 ③Input.dispatchMouseEvent(type='mousePressed', x, y) ④Input.dispatchMouseEvent(type='mouseReleased', x, y)。此方法对 ant-dropdown-trigger(images-options)和 ant-select-selector(弹窗内下拉)均有效。做完一步必须让用户确认看到变化再继续下一步。不许猜下一步,用户说一步你做一步。Input.dispatchKeyEvent(type='keyDown', key='Escape') + (type='keyUp', key='Escape') 在select操作之间清场。缺少这一步会导致后续所有select都打在上一个下拉的遮罩上。.ant-btn-primary,文本「一键翻译」)。错误操作: 点了「快速翻译」checkbox 然后等翻译 → 没用,因为这只是个模式开关。正确操作: 确认「快速翻译」已勾选(不用动它),然后点**「一键翻译」**按钮。Input.dispatchMouseEvent 坐标点击 ✅ 能打开 dropdown ❌ 选中后值不持久化;Playwright mouse.click() 同上;Playwright locator.click() 同上;keyboard ArrowDown+Enter 同上;JS element.click() 同上。疑似 Vue 3 select 组件的内部状态不响应外部事件。策略:优先填星号字段,非星号字段跳过不纠缠。超过3次尝试不成功立即停手,汇报给用户手动选。browser_snapshot 截断在约1500行,无法覆盖编辑页下半部分(SKU表、描述、包装、模板等)。替代方案: 用 execute_code + Python websockets 库直连 ws://127.0.0.1:19223/devtools/page/{targetId},发送 Runtime.evaluate CDP命令执行 JS 表达式扫描页面全部数据(document.querySelectorAll、document.body.innerText 等),返回结构化 JSON。此法可一次性扫描所有带星号字段、请选择数量、body文本长度等,不受视口截断限制。详见 references/cdp-websocket-qa-scan.md。ant-modal-wrap notice-list-modal),会拦截所有 Playwright locator.click() 操作(元素可见但 pointer events 被弹窗拦截,30秒超时)。但 JS evaluate 操作不受影响。解决方案: 每次开始编辑前,先执行 JS 强制清除所有弹窗:document.querySelectorAll('.ant-modal-wrap, .notice-list-modal, .bullet-layer').forEach(m => m.remove())。如果清除不彻底(弹窗按钮的click不触发Vue),关掉后再用 locator.click({force: true})。selector.dispatchEvent(new MouseEvent('mousedown', {bubbles: true})); selector.dispatchEvent(new MouseEvent('mouseup', {bubbles: true})); selector.click() 打开 dropdown,然后 item.click() 选选项。但此方法在共享下拉池场景下不可靠(可能点到错误的dropdown)。如遇连续失败,不要死磕属性字段,先填其他模块,最后汇报给用户手动修正。Auto-launch failed: CDP WebSocket connect failed: HTTP error: 404 Not Found 时,browser.engine: cdp 也无法解决。回退到纯 browser_cdp 工具操作(Target.getTargets, Page.navigate, Runtime.evaluate, Target.createTarget, Page.captureScreenshot 等)。完整操作指南见 references/cdp-direct-operation.md。Input.dispatchMouseEvent、Playwright mouse.click()、JS element.click()、dispatchEvent、keyboard Enter 等任何已知方法。疑似Vue 3 + ant-modal-wrap双重拦截。「保存」按钮可用(Playwright mouse.click有效)。流程改为:自动化填完所有字段 → 点「保存」→ 通知用户手动点「保存并移入待发布」。connect_over_cdp('http://127.0.0.1:19223') 连接Chrome的CDP端点后,browser.contexts[0].pages 返回所有打开的标签页。不需要通过Target.getTargets + activateTarget来切换——直接用 for pg in browser.contexts[0].pages 找到目标页并操作。但每个page对象已绑定固定target,操作前务必确认 pg.url 匹配。Auto-launch failed: CDP WebSocket connect failed: HTTP error: 404 Not Found 时,browser.engine: cdp 也无法解决。回退到纯 browser_cdp 工具操作(Target.getTargets, Page.navigate, Runtime.evaluate, Target.createTarget, Page.captureScreenshot 等)。完整操作指南见 references/cdp-direct-operation.md。作者: Rigi AI Commons | 小红书 @瑞吉AI人民公社 | AI自动化专家工作流
店小秘速卖通编辑页——属性信息模块:产品属性批量填(ant-select CDP填充)+ 自定义属性删除
店小秘速卖通编辑页——基本信息模块:标题改英文 + 产品分类选择
速卖通上架——1688采集模块:从1688搜索产品 → 采集到店小秘采集箱 → 提取产品参数(价格/库存/重量/材质等)
店小秘速卖通编辑页——店小秘信息模块:来源URL(只读,记录用)
店小秘速卖通上品完整工作流——从采集箱到发布的所有模块编排、调用顺序、区域调价、保存发布
店小秘速卖通编辑页——其他信息模块:半托管/关税/责任人/制造商/资质 + 区域调价 + 保存并移入待发布