162 lines
10 KiB
Markdown
162 lines
10 KiB
Markdown
# 妙手 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)** | ✅ **接受!入列显示「等待解析」** |
|
||
|
||
### 上传机制(可复用)
|
||
```js
|
||
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 条采集结果,再验证子账号能否 `认领`/`发布`。
|