闲鱼易店全自动上货
一句话
加载此 Skill 后,你就是一个会操作易店后台、会读总上货.txt、会上架商品、会配置自动发货的闲鱼自动化助手。不是在帮用户写代码 —— 你就是那个执行者。
适用场景
通过易店助手(ed.weeeg.com)后台批量管理闲鱼商品上架的自动化工具。支持多店铺、多商品批量发布,自动配置自动发货、售罄上架等售后功能。
适用人群:在闲鱼平台经营虚拟商品(软件教程、数字资料等)的卖家,使用易店助手作为管理后台。
环境要求
- Python 3.12+(推荐 3.14)
- 依赖:playwright(
pip install playwright) - 浏览器:Chrome 或 Edge,以
--remote-debugging-port=9222启动 - 已登录易店助手后台(ed.weeeg.com)
首次使用配置
首次使用前,请修改 scripts/config.py 中的配置项:
- WORK_DIR:你的工作目录路径(存放总上货.txt、图片等文件的根目录)
- ED_USERNAME / ED_PASSWORD:易店助手登录账号密码(留空则需手动登录)
- SHOP_CONFIG:你的店铺配置(名称、分类、价格、库存、城市等)
- SHOP_NAME_MAP:店铺名到 ID 的映射
完整文件地图
你的工作目录/
├── 总上货.txt ← 商品总清单(一/二/三/四格式)
├── 已上架记录.txt ← 上架追踪(date|title|shop)
└── 图片/
├── 店铺1名/
│ └── {日期}/ ← 如 6.23/
└── 店铺2名/
└── {日期}/
脚本位置(Skill 安装目录下):
scripts/
├── config.py ← 配置文件(路径、账号、店铺参数)
├── auto_publish.py ← 主控:解析→筛选→去重→上架→标记
├── publisher.py ← Playwright 发布核心 + 配置
└── batch_parser.py ← 总上货.txt 解析器
总上货.txt 格式
每个商品块以「一、发布时间」开头,块间空行分隔:
一、发布时间:6.23
二、商品文案:
商品标题第一行
后续均为描述内容……
三、店铺:省钱小喵咪
四、网盘发货文案:
网盘分享文本(含链接+提取码)
格式要点
- 发布时间格式:
M.D(如 6.23),无前导零 - 提取码自动识别:
提取码:xxx、pwd=xxx、或末行短文本 - 图片按
图片/{店铺名}/{日期}/自动匹配,标题关键词模糊匹配 - 上架成功后自动在发布时间行末尾追加
已发布,下次解析自动跳过 batch_parser.py解析时遇到含已发布的块直接[SKIP]
脚本职责与数据流
总上货.txt
↓
batch_parser.py 解析商品块,跳过"已发布"
↓
auto_publish.py 主控
├─ 当天日期过滤(M.D 格式对比)
├─ 已上架记录去重(key: date+title+shop)
└─ 逐个调用 publisher.py
├─ 第一步:发布商品(标题/图片/文案/城市/店铺/分类/规格/价格/库存/运费)
│ ↑ 标题:填入前自动截断到30字以内
│ ↑ 分类:从 config.py 读取每个店铺的分类
└─ 第二步:自动发货 + 售罄上架 + 2人小刀(可选)
↓
成功后:
├─ 写入 已上架记录.txt
└─ mark_published_in_total() → 总上货.txt 追加"已发布"
运行环境与执行命令
# 全自动(推荐)
python scripts/auto_publish.py
# 预览模式(不实际上架)
python scripts/auto_publish.py --dry-run
# 仅解析预览
python scripts/batch_parser.py
配置项说明(config.py)
| 参数 | 说明 | 示例 |
|---|---|---|
| WORK_DIR | 工作目录根路径 | r"D:\闲鱼自动化" |
| CDP_URL | 浏览器 CDP 连接地址 | http://127.0.0.1:9222 |
| ED_USERNAME | 易店助手用户名(空则手动登录) | admin |
| ED_PASSWORD | 易店助手密码(空则手动登录) | yourpassword |
| SHOP_CONFIG | 店铺配置字典(名称/分类/价格/库存/城市等) | 见 config.py |
| SHOP_NAME_MAP | 店铺名 -> ID 映射 | {"店铺A": 1, "店铺B": 2} |
技术要点与踩坑经验
Element UI 操作要点
- 商品分类是
el-cascader级联选择器(单级菜单),不是el-select下拉。正确做法是找.el-cascader__dropdown .el-cascader-node - Element UI 下拉选项文本可能含店铺编码(如「店铺名(tb577617100)」),匹配用 indexOf
- Playwright 判定下拉项不可见(teleport 机制),需用
dispatchEvent(new MouseEvent('click'))绕过 - Element UI 弹窗 fixed 定位,
offsetParent永远为 null,可见性检测用getComputedStyle(d).display !== 'none' - 输入框用
.el-input__inner选择器,focus()+click()激活后用原生 setter 设值 - 设值后同时触发 input 和 change 事件,
setTimeout 500ms等 Vue 响应后再点确认
浏览器原生 JS 限制
- 浏览器原生
querySelectorAll不支持:visible伪类,会直接报错 - Playwright 的
page.query_selector支持:visible,但evaluate()里的 JS 不支持,两处要区分 - 改用
offsetParent !== null判断可见性
标题30字限制
- 易店标题字段限制30字,超过会提示报错阻止发布
- 在 publisher.py 填入标题前主动检查:
if len(title) > 30: title = title[:30]
自动发货开关状态
- 保存弹窗后自动发货开关可能被重置为 OFF,需要重新点击才能真正开启
- 保存后检查开关状态,若为 OFF 则重新点击开启;若二次点击又弹窗则自动保存并关闭
- 配置完成后不刷新页面(刷新会重置开关状态)
禁止行为
- 并行操作多个商品(逐个串行处理)
- 重复操作已配置好的开关(售罄上架、自动发货等)
- 在输出中暴露账号密码或敏感信息
- 手动操作模式时不截图就执行下一步
图片匹配策略
- 策略1:标题/图片名互相包含(取标题前15字符模糊匹配)
- 策略2:标题中的中文词匹配(2字以上中文)
- 策略3:标题中的英文词匹配(3字母以上英文)
- 策略4:目录下只有一个文件就直接用
- 兜底:以上都匹配不到时用第一张图
版本:1.1.0 | 创建日期:2026-06-23 | 最后更新:2026-07-04