Files
dianxiaomi-crossborder-play…/妙手建品/RECIPE.md
T

13 KiB
Raw Blame History

妙手 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,可以直接取出来识别

登录步骤(可复用)

  1. 填账号/密码(原生 setter + input/change 事件)
  2. 取验证码:document.querySelector('.captcha-field__img').src → 剥掉 data:image/jpeg;base64, → 存成 .jpg(⚠️ 字节是 JPEG,存成 .png 读图工具会拒绝)
  3. 点一下 img.captcha-field__img 可刷新验证码
  4. 填入 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全托管)

权限现状(技能档口径,待实测确认)

技能档写明该子账号:「采集箱/导入采集 可用,产品发布不可用」。 页面上 采集并自动发布 按钮存在,但能否真正发布要实测(用户已确认:先用子账号把采集箱/导入采集跑到能用)。

下一步(下一步就能动手)

  1. 走 导入采集:确认它接受什么输入(链接批量/CSV/Excel/1688 链接?), 把 48 条商品的 alicdn 图 + 1688 链接喂进去
  2. 走 链接采集:单条/批量粘贴 1688 链接
  3. 采集入箱后,验证「公用采集箱」里能否批量 认领/发布(受子账号权限限制)

导入采集(?fetchType=importCopy)— 四种模式

模式 说明
导入链接采集 要文件(面板里有「下载导入模板」+「确认/取消」),提示语:「链接地址列必填,其他列选填。若填写其他列,以填写为准,若留空以来源为准。」
Excel表格导入 Excel 表格导入
本地素材包导入 本地素材包
聚水潭素材包导入 聚水潭素材包

页面下方是已导入文件列表:文件名称 / 导入时间 / 解析状态 / 成功条数 / 失败条数 / 操作 (文件仅保留 90 天,当前「暂无数据」)。

✅ 下一步可直接动手的一条路:用 1688 链接喂「导入链接采集」

tk_input.json 的 key 就是 1688 商品 id(如 676236596821), 所以每条商品的链接可以直接拼:https://detail.1688.com/offer/<id>.html(48 条 → 48 行)。

步骤:

  1. 在面板里点 「下载导入模板」 拿到确切列名与格式(列名/是否要表头/单列或多列)
  2. 用 48 个 1688 链接生成导入文件(链接地址 列必填)
  3. 上传 → 确认 → 到「已导入的文件列表」看解析状态 / 成功条数 / 失败条数
  4. 解析成功后在 公用采集箱 里核对待采集商品,再验证子账号能否 认领/发布

⚠️ 未验证:模板的确切列名(要先下载模板)、上传控件的选择器、以及子账号能否发布。

✅ 导入链接采集 = 按模板列做 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)

关键结论(下一轮别再走弯路)

  1. 必须是 .xls/.xlsx 二进制表格——CSV 一律只报「未识别到【产品主编号】表头」,txt 走 JSON 也走不通;
  2. 页面下载的模板是旧的:它只有 4 列、缺 产品主编号,照它填一定失败 (错误提示会写「请下载最新模版」,但最新模板实际要的就是上面这 8 列);
  3. 生成脚本:pip install --break-system-packages xlwt → xlwt.Workbook(encoding='utf-8') → 写表头+47 行 → 存 .xls → 用 DOM.setFileInputFiles 注入 input.jx-upload__input → 点「确认」;
  4. 失败时**点「查看失败原因」**能看到逐行逐列的精确原因(这次就是靠它拿到 货币类型/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 条的采集任务还没出结果(导入只登记了链接, 真正的抓取是异步队列,可能要看队列积压或需要显式触发)。

下一步(顺序固定)

  1. 隔一段时间刷新 /common_collect_box/items 与「任务记录」,等 47 条采集进箱;
  2. 进箱后选一条 → 点 认领到 → 选平台/店铺(平台认领配置 里可预设)→ 观察是否被权限拦截;
  3. 若能认领,再看该平台店铺里能否 发布(子账号权限的分水岭)。

复用脚本

ms_box.mjs(进采集箱 dump 按钮/列表)、ms_task.mjs(读任务记录)、 ms_items.mjs(点「查看导入产品」)、ms_status.mjs(导入列表状态)、ms_reason.mjs(查看失败原因)。

再查一次(仍为空)+ 三个待验证假设

复核结果:

  • 导入任务 ms2:解析成功 47/0/47(文件层面没问题)
  • 公用采集箱 /common_collect_box/items:仍为空(暂无数据,行数 0)
  • 「任务记录」:表头在、无数据行
  • 在导入列表点 「查看导入产品」(DOM 点击 + 真实鼠标点击都试过): 无弹窗、无新标签、URL 不变 —— 这个入口不是「开始采集」的意思

采集箱的筛选字段是:关联货源 / 产品标题 / 货源ID / 货源价格。

下一步优先验证(按可能性排序)

  1. 关联货源筛选:采集箱默认可能过滤了货源;把 关联货源 选成 1688(或「全部」)再看 —— 我们这批就是 1688 链接,很可能被默认筛选藏住了;
  2. 导入文件行的「更多」菜单:导入列表每行有 更多 → 看里面是否有「开始采集 / 采集设置 / 认领」之类动作;
  3. 采集设置:页面顶部有 采集设置,可能要求先配置采集参数/翻译/图片来源,否则任务不启动。

⚠️ 结论:导入≠已采集。解析成功 只代表表格被接受,真正抓取需要触发(或等到队列跑)。 判定标准只有一个:公用采集箱里出现 47 条。