12 KiB
妙手 ERP(erp.91miaoshou.com)配方 — 已登录、采集箱可达
✅ 登录(子账号 xiaochaoren2026,2026-09-21 成功)
舰队技能档 agent-a2-import/skills/ecommerce/miaoshou-erp/SKILL.md 的选择器已全部失效,
实测的真实登录表单(登录弹窗内):
| 字段 | 选择器 |
|---|---|
| 账号 | input.login-form__input[placeholder="手机号/子账号/邮箱"] |
| 密码 | input.login-form__input[type=password] |
| 验证码 | input.captcha-field__input(maxlength=4) |
| 登录按钮 | button.login-form__submit-btn(文案「立即登录」) |
| 验证码图 | img.captcha-field__img ← src 是 base64 JPEG,可以直接取出来识别 |
登录步骤(可复用)
- 填账号/密码(原生 setter +
input/change事件) - 取验证码:
document.querySelector('.captcha-field__img').src→ 剥掉data:image/jpeg;base64,→ 存成.jpg(⚠️ 字节是 JPEG,存成.png读图工具会拒绝) - 点一下
img.captcha-field__img可刷新验证码 - 填入 4 位码 → 点
.login-form__submit-btn→ 成功会跳到/welcome(标题「妙手-欢迎使用」)
⚠️ 验证码是强制的(技能档写的「非强制、可跳过」已失效);失败会计数,再错 9 次锁 1 小时
⚠️ 本机 modlens 没有配置视觉提供方(报错:No vision provider),验证码是我自己看图读的
采集箱(已进入)
- 入口:顶栏
.function-item里点 产品采集 - 路由:
https://erp.91miaoshou.com/common_collect_box/index?fetchType=linkCopy(标题「妙手-产品采集」) - 页面上的操作按钮:
采集优化/采集设置/更多/采集并自动认领/采集并自动发布/我知道了 - 采集方式(左侧/顶部):
链接采集、导入采集、关键词采集、整店采集、插件采集、店铺互采 - 其它模块:
公用采集箱、AI工作台、侵权检测、货盘中心(1688跨境热卖/1688搜同款/跨境产业带)、数据选品、快速上货(Temu全托管)
权限现状(技能档口径,待实测确认)
技能档写明该子账号:「采集箱/导入采集 可用,产品发布不可用」。
页面上 采集并自动发布 按钮存在,但能否真正发布要实测(用户已确认:先用子账号把采集箱/导入采集跑到能用)。
下一步(下一步就能动手)
- 走
导入采集:确认它接受什么输入(链接批量/CSV/Excel/1688 链接?), 把 48 条商品的 alicdn 图 + 1688 链接喂进去 - 走
链接采集:单条/批量粘贴 1688 链接 - 采集入箱后,验证「公用采集箱」里能否批量
认领/发布(受子账号权限限制)
导入采集(?fetchType=importCopy)— 四种模式
| 模式 | 说明 |
|---|---|
| 导入链接采集 | 要文件(面板里有「下载导入模板」+「确认/取消」),提示语:「链接地址列必填,其他列选填。若填写其他列,以填写为准,若留空以来源为准。」 |
| Excel表格导入 | Excel 表格导入 |
| 本地素材包导入 | 本地素材包 |
| 聚水潭素材包导入 | 聚水潭素材包 |
页面下方是已导入文件列表:文件名称 / 导入时间 / 解析状态 / 成功条数 / 失败条数 / 操作
(文件仅保留 90 天,当前「暂无数据」)。
✅ 下一步可直接动手的一条路:用 1688 链接喂「导入链接采集」
tk_input.json 的 key 就是 1688 商品 id(如 676236596821),
所以每条商品的链接可以直接拼:https://detail.1688.com/offer/<id>.html(48 条 → 48 行)。
步骤:
- 在面板里点 「下载导入模板」 拿到确切列名与格式(列名/是否要表头/单列或多列)
- 用 48 个 1688 链接生成导入文件(
链接地址列必填) - 上传 →
确认→ 到「已导入的文件列表」看解析状态 / 成功条数 / 失败条数 - 解析成功后在 公用采集箱 里核对待采集商品,再验证子账号能否
认领/发布
⚠️ 未验证:模板的确切列名(要先下载模板)、上传控件的选择器、以及子账号能否发布。
✅ 导入链接采集 = 按模板列做 CSV 上传(已跑通到「等待解析」)
模板列(python3 -m pip install --break-system-packages xlrd 读出来的)
下载的 导入产品链接模板.xls 是真·OLE2 文件,本机没有 xlrd/libreoffice,
装了 xlrd(pip install --break-system-packages xlrd)后读出:
| 列 | 说明 |
|---|---|
链接地址(必填) |
商品链接 |
产品标题 |
标题 |
价格(RMB) |
价格 |
促销价(RMB) |
促销价(表头提示:仅可用于采集到 Lazada) |
格式踩坑(三次失败才走对)
| 提交内容 | 结果 |
|---|---|
.txt 一行一个链接 |
❌ …文件内容不是json格式(.txt 必须放 JSON) |
.json URL 数组 |
❌ …文件标题缺失 |
.json 带 title/url/链接地址(每项) |
❌ 同上 |
.json 根节点带 title/标题 + links/data/list |
❌ 同上 |
.csv(表头用模板那 4 列,UTF-8 BOM) |
✅ 接受!入列显示「等待解析」 |
上传机制(可复用)
await c.send('DOM.enable');
const { root } = await c.send('DOM.getDocument', { depth: -1 });
const { nodeId } = await c.send('DOM.querySelector', { nodeId: root.nodeId, selector: 'input.jx-upload__input' });
await c.send('DOM.setFileInputFiles', { files: ['/path/ms_import.csv'], nodeId });
// 然后点面板里的「确认」
上传控件:input.jx-upload__input(隐藏,accept=.xls,.txt,.zip,.json,.xlsx,.csv)。
注意:上传/确认后面板会关闭,下一次上传前要重新点「导入采集 → 导入链接采集」。
当前状态
已导入文件列表里有一条:ms_import | 2026-09-21 07:40:12 | **等待解析** | …(47 条链接 + 标题 + 价格)。
解析是异步排队的,30–60 秒内还没变;下一步就是等它变成成功/失败并看「成功条数/失败条数」,
再点「查看导入产品」或去 公用采集箱 核对采集到的商品。
生成脚本
/home/admin9webs/miaoshou/dl/ms_import.csv(47 行,已排除无水印图的 601964534137),
由 tk_input.json 生成:链接 = https://detail.1688.com/offer/<pid>.html。
导入格式的完整试错记录(第 2 轮,全部失败,附下一步)
| # | 上传内容 | 结果 |
|---|---|---|
| 1 | .txt 一行一链接 |
❌ …文件内容不是json格式 |
| 2 | .json URL 数组 |
❌ …文件标题缺失 |
| 3 | .json 每项带 title/url/链接地址 |
❌ 同上 |
| 4 | .json 根节点 title/标题 + links/data/list |
❌ 同上 |
| 5 | .csv(模板 4 列,UTF-8 带 BOM) |
接受入列 → 解析失败:未识别到:【产品主编号】表头 |
| 6 | .csv(补 产品主编号 列,带 BOM) |
❌ 同一句 |
| 7 | .csv(补 产品主编号 列,无 BOM UTF-8) |
❌ 同一句(BOM 不是原因) |
| 8 | 官方模板 .xls 原样上传 |
前端直接拒:未匹配到数据,请检查模板是否正确(空模板无数据行),未产生导入任务 |
结论
- 解析器要的是带数据的
.xls(或.xlsx),且表头里必须有产品主编号; - CSV 看起来不管用(即使表头齐全、去掉 BOM,仍只报缺
【产品主编号】); - 下载到的模板只有 4 列(
链接地址(必填)/产品标题/价格(RMB)/促销价(RMB)), 缺产品主编号→ 服务端模板与解析器版本不一致(错误提示也写着「请下载最新模版」)。
下一步(就一件事)
用能写 Excel 的库生成 .xls/.xlsx(本机:pip install --break-system-packages xlwt 或 openpyxl),
表头 = 产品主编号, 链接地址(必填), 产品标题, 价格(RMB),47 行数据,再上传。
若仍报缺表头,则说明必须改用服务端最新模板(可能要在页面上换一个平台/入口重新下载一次模板)。
当前队列状态
已导入文件列表里有 3 条失败任务(ms_import / ms_import2 / ms_nobom),可在页面上「删除文件」清掉。
✅✅ 导入链接采集终于通了:ms2.xls 解析成功 47/0/47(2026-09-21 08:55)
能用的 .xls 表头(照抄这 8 列)
| 列 | 示例值 | 说明 |
|---|---|---|
产品主编号 |
548459586741 |
1688 商品 id,必须有 |
链接地址(必填) |
https://detail.1688.com/offer/548459586741.html |
采集源链接 |
产品标题 |
英文标题 | 可留空(留空以来源为准) |
货币类型 |
CNY |
必须;空值报「不允许此货币类型」 |
SKU售价 |
34.0 |
必须 ≥ 0.01;空值报「必须大于等于0.01」 |
SKU库存 |
999 |
必须 ≥ 0 |
价格(RMB) |
34.0 |
模板原有列 |
促销价(RMB) |
空 | 模板原有列(表头提示:仅可用于采集到 Lazada) |
关键结论(下一轮别再走弯路)
- 必须是
.xls/.xlsx二进制表格——CSV 一律只报「未识别到【产品主编号】表头」,txt走 JSON 也走不通; - 页面下载的模板是旧的:它只有 4 列、缺
产品主编号,照它填一定失败 (错误提示会写「请下载最新模版」,但最新模板实际要的就是上面这 8 列); - 生成脚本:
pip install --break-system-packages xlwt→xlwt.Workbook(encoding='utf-8')→ 写表头+47 行 → 存.xls→ 用DOM.setFileInputFiles注入input.jx-upload__input→ 点「确认」; - 失败时**点「查看失败原因」**能看到逐行逐列的精确原因(这次就是靠它拿到
货币类型/SKU售价/SKU库存三个列名)。
产物
/home/admin9webs/miaoshou/dl/ms2.xls(47 行,可复用为模板);上传脚本 ms_upload.mjs;
状态查询 ms_status.mjs;失败原因 ms_reason.mjs。
下一步
「查看导入产品」/ 公用采集箱 里核对这 47 条采集结果,再验证子账号能否 认领/发布。
公用采集箱与采集任务(第 3 轮观察)
公用采集箱:https://erp.91miaoshou.com/common_collect_box/items
页面可用按钮(均为未禁用状态):任务记录 / 搜索 / 重置 / 更多筛选 /
认领到 / 平台认领配置 / 批量编辑 / 分组 / 删除 / 更多 / 创建产品 / 导入产品 / 列表设置 / 全选。
→ 认领到 按钮存在且未禁用,说明子账号可能有认领权限(技能档说「不能发布」,但认领≠发布,
需要实测点一次才知道)。列表当前为空(尚未采集出结果)。
任务记录
点「任务记录」弹层里表头是 项目 / 提交时间 / 状态 / 翻译配置 / 任务进度 / 操作,
当前无数据行 —— 说明这 47 条的采集任务还没出结果(导入只登记了链接,
真正的抓取是异步队列,可能要看队列积压或需要显式触发)。
下一步(顺序固定)
- 隔一段时间刷新
/common_collect_box/items与「任务记录」,等 47 条采集进箱; - 进箱后选一条 → 点
认领到→ 选平台/店铺(平台认领配置里可预设)→ 观察是否被权限拦截; - 若能认领,再看该平台店铺里能否 发布(子账号权限的分水岭)。
复用脚本
ms_box.mjs(进采集箱 dump 按钮/列表)、ms_task.mjs(读任务记录)、
ms_items.mjs(点「查看导入产品」)、ms_status.mjs(导入列表状态)、ms_reason.mjs(查看失败原因)。