fix: stabilize Shopee cover replacement

This commit is contained in:
chengma
2026-07-01 08:35:46 +08:00
parent f7ea9ec0fa
commit 483bec427c
18 changed files with 782 additions and 330 deletions
+10 -9
View File
@@ -45,11 +45,11 @@
| AI 生成(②) | 输入标题/封面提示词,AI 据提示词+旧标题生成新标题、据提示词+旧封面生成新封面 | P0 |
| 提示词管理(②) | 标题提示词「保存」到 `title_prompt.txt` 并启动回显;封面提示词多模板(下拉 + 新建/保存/另存为/重命名/删除)+ 插入 `{新标题}` + 预览(变量替换) | P0 |
| 查看对照(②) | 双击任务弹窗查看新旧封面(纯查看,无逐条审核阶段);可选对单行重生成 | P0 |
| 更新 shopee(③) | 按批次/店铺/状态筛选;点击「开始更新」后弹窗确认,确认后对当前筛选出的已生成任务打开编辑页换标题+封面,并逐条点「更新」提交线上;可按状态=失败重试 | P0 |
| dry-run / 运行日志 / 多账号并行(③/⑤) | dry-run 只预览不打开 Shopee、不提交、不改任务状态;真实更新写运行日志;可在⑤开启多账号并行,同账号内仍串行 | V2 已接入 |
| 更新 shopee(③) | 按批次/店铺/状态筛选;可先「预览本轮更新」确认范围;点击「开始更新」后弹窗确认,确认后对当前筛选出的已生成任务按每批最大条数分批更新 Shopee,逐条换标题+封面并点「更新」提交线上;普通正式更新不再受测试商品 ID 限制,可批量更新真实商品;可按状态=失败重试 | P0 |
| 预览本轮更新 / 运行日志 / 多账号并行(③/⑤) | ③ 提供「预览本轮更新」按钮,不打开 Shopee、不提交、不改任务状态,只显示当前筛选范围、店铺分布、预计分批和会更新字段;真实更新写运行日志;可在⑤开启多账号并行,同账号内仍串行 | V2 已接入,预览按钮待改名接入 |
| 结果存储与回写 | 各阶段结果实时存 SQLite;该文件全部完成后把旧/新数据+状态批量回写原 Excel | P0 |
| 设置(⑤) | AI 模型管理(下拉+新增/删除/详情/测试连接,至少各一个文本+图像模型);标题/图片大模型角色选择;分辨率(512/1k/2k/4k,返回超时随分辨率自动);并发/重试/jpg质量;图片目录/Chrome 路径/端口 | P0 |
| 首次引导保护 | 未配账号、对应账号 Chrome 未启动或未登录时,① ③ 执行按钮禁用/执行前拦截并提示去④ | P0 |
| 设置(⑤) | AI 模型管理(下拉+新增/删除/详情/测试连接,至少各一个文本+图像模型);标题/图片大模型角色选择;分辨率(512/1k/2k/4k,返回超时随分辨率自动);并发/重试/jpg质量;图片目录/Chrome 路径/端口;设置页采用居中内容区、适度左右留白和响应式三列表单,长字段跨列显示;点击「保存设置」成功后弹轻量提示框 | P0 |
| 首次引导保护 | 未配账号、对应账号 Chrome 未启动或未登录时,① ③ 执行按钮禁用/执行前拦截并提示去④;③ 不自动打开缺失账号 Chrome,必须中止本轮更新 | P0 |
### 后续迭代
@@ -63,7 +63,7 @@
2. 我为某账号点击「启动并登录」,工具用它专属的配置目录打开 Chrome,我手动登录一次 Shopee 卖家中心。
3. 之后我选中该账号、填入商品 ID,工具自动打开该商品详情页(带登录态)。
4. 工具自动把标题改成目标值,并上传我指定的图片、把它拖到第一位设为封面。
5. 我在 ③ 按批次/店铺/状态筛选已生成任务,点击「开始更新」后看到批量确认弹窗;确认后工具逐条提交线上,取消则不执行。
5. 我在 ③ 按批次/店铺/状态筛选已生成任务,点击「开始更新」后看到批量确认弹窗;若本轮需要的账号 Chrome 未启动或未登录,工具先列出账号并中止;确认且账号均就绪后工具逐条提交线上,取消则不执行。
6. 当账号尚未登录、商品页加载失败或封面已满 9 张时,工具给出明确提示并安全处理。
## 五、验收标准(V1)
@@ -74,7 +74,7 @@
- **加载商品页**:选定账号执行时,能用该账号登录态打开目标商品详情页,标题框与图片管理器渲染就绪。
- **改标题**:写入后标题框 `value` 与 `modelvalue` 均等于目标值(确认页面模型已更新)。
- **换封面**:上传成功后图片张数 +1(满 9 张时先确认旧封面本地备份存在,再删第一张并上传;备份缺失则拒绝删除);目标图被拖到第一位成为封面。
- **提交更新**:③ 点击「开始更新」后必须弹窗确认本次筛选范围和任务数量;用户确认后才逐条点「更新」,按钮禁用则不点并记录失败原因。
- **提交更新**:③ 点击「开始更新」后必须弹窗确认本次筛选范围和任务数量;真实提交前必须检查本轮需要的账号 Chrome 已启动且已登录,缺失则弹窗列出账号并中止本轮、不自动打开 Chrome;用户确认且账号就绪后才逐条点「更新」,按钮禁用则不点并记录失败原因。
- **安全**:任意失败路径不崩溃、不误删、不在缺少批量确认的情况下提交线上。
## 六、范围边界与决策
@@ -87,7 +87,8 @@
| 存储 | 应用设置用 `config.json`;账号/任务/结果用 SQLite;Excel 读写用 openpyxl |
| 账号↔任务绑定 | 以 Excel“别名”列为权威(非文件名);匹配不到的略过并最后弹窗汇总 |
| 是否提交更新 | ③ 点击「开始更新」后弹窗确认;确认后对当前筛选结果逐条点「更新」提交线上;无常驻提交开关、无逐条人工审核 |
| 执行方式 | 默认多账号串行;⑤ 可开启多账号并行,不同账号可同时跑、同账号内仍串行;单条失败继续 |
| 执行方式 | 默认多账号串行;⑤ 可开启多账号并行,不同账号可同时跑、同账号内仍串行;③ 按当前筛选结果全部更新,普通正式更新不再以测试商品 ID 阻断,超过每批最大条数时自动分批;单条失败继续 |
| 更新前账号就绪 | ③ 真实更新前检查当前筛选结果需要的账号;Chrome 未启动、CDP 端口不可达或未登录时整体中止并提示去④,不静默自动启动账号浏览器 |
| 旧标题/旧封面 | 程序在「采集」阶段改前抓取的快照(输出列),运营不填 |
| 新标题/新封面 | AI 生成(输出列),直接用于 ③;不设逐条确认阶段,本地留档+回写 Excel 供追溯 |
| AI 服务 | 文本+图像生成,服务商/模型待定;Key 本地明文存于 `config/ai_models.json`,首次保存/变更时提示,UI 打码、不入日志;见 [技术栈](03-tech-stack.md) |
@@ -106,8 +107,8 @@
- **AI Key 安全**:Key 本地明文存于 `config/ai_models.json`,保存/变更时提示,UI 打码,不写日志,不提交版本库。
- **第三方平台风险**:Shopee 页面结构、class 名、接口随时可能变;限流、风控、封号风险存在,禁止高频批量。
- **自动化边界风险**:③ 确认后会自动改标题、上传图片、拖拽并点「更新」提交线上;点「开始更新」并确认前需自行确保筛选范围、任务来源与 AI 产出可接受。
- **dry-run 边界**:⑤ 开启 dry-run 后,③ 只预览当前筛选任务并写运行日志,不打开 Shopee、不点击更新、不改任务状态;关闭 dry-run 后才可能真实提交。
- **预览边界**:③「预览本轮更新」只预览当前筛选任务并写运行日志,不打开 Shopee、不点击更新、不改任务状态;点击「开始更新」并确认后才可能真实提交。
- **多账号并行风险**:⑤ 开启多账号并行后,不同账号可同时执行更新;同一账号内仍串行。执行前检查本轮账号调试端口,端口冲突时阻断真实更新。
- **合规风险**:仅在自有/授权账号上操作;遵守 Shopee 卖家条款;不绕过任何平台限制。
- **GUI 选型**:V1 固定为 PySide6;后台任务通过 QThread/signal 回传进度,见 [技术栈](03-tech-stack.md) 与 [架构](04-architecture.md)。
- **多账号并行默认关闭**:默认仍串行;只在⑤明确开启后并行,建议先 dry-run 预览并确认账号 Chrome 均已登录。
- **多账号并行默认关闭**:默认仍串行;只在⑤明确开启后并行,建议先用「预览本轮更新」确认账号、店铺和任务范围。