Files
cmshoppe/docs/tasks/T-587.md
T

47 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-587
title: AI工场商品项目入口与 CDP 只读拉取蝦皮原主图 URL
phase: 7
deps: [T-586, T-563]
status: DONE
created: 2026-07-11
---
## 问题 / 背景
AI工场以“账号 + 商品 ID”建立项目,并从该账号 Chrome 的商品详情页只读取得全部主图 URL。该流程必须复用已验证 CDP、登录检测、商品失效 toast 和 tab 清理纪律,不能另写页面选择器或修改蝦皮商品。
## 方案
- 新增项目入口服务:校验账号、商品 ID 和重复项目;重复时打开已有项目。
- 抽取/复用 `app.editor` 图片列表读取能力,返回有序 `{src, index}`,不要求上传 input,不下载图片、不改标题/图片。
- 按①采集的只读边界确保账号 Chrome 就绪:已打开复用,未打开才启动;只检测登录,不自动登录、不填密码。
- 商品页后台打开,不主动抢焦点;只关闭本轮自动新建 tab,复用用户已有 tab 不关闭。
- 详情页失效、无权限、未登录、CDP 超时继续上浮结构化中文原因和 Shopee 原始 toast。
- 抓取结果写项目的原图 URL 快照,刷新时按 URL/顺序更新,不创建本地 asset,下载留给 T-588。
## 验收要点
- mock 覆盖已开 Chrome 复用、未开启动、明确未登录、暂时不确定登录、商品失效和成功读 1..9 张 URL。
- 成功路径不调用标题修改、文件上传、拖拽或更新提交。
- URL 顺序与蝦皮主图顺序一致;重复刷新幂等。
- 新建失败 tab 清理、复用 tab 保留;`bring_to_front=False`。
- 涉及 CDP 变更时同步 `docs/04-architecture.md` 并在测试商品做只读实跑;不点击更新。
## 边界(不改什么)
- 不下载/显示图片,不做照片池 GUI,不写蝦皮。
- 不更改现有①采集和③更新行为。
- 不绕过登录、验证码、风控或权限检查。
## 执行记录
- 2026-07-11:完成 AI工场商品项目入口与原主图 URL 只读拉取代码。
- `app/editor.py` 新增 `read_product_image_urls()`,复用已验证 itembox rects 顺序返回 `{index, src}`;新增 `close_readonly_product()` 复用①采集 tab 清理规则。
- `app/image_studio.py` 新增项目入口 `pull_remote_main_image_urls()`:按账号+商品创建/打开项目,复用/启动账号 Chrome,只检测登录;明确登录页阻断,不确定登录继续尝试打开商品页;商品页用 `open_product(..., bring_to_front=False)` 后台只读打开,读取 URL 后同步为 remote-only `original` assets,不下载图片、不修改蝦皮、不点击更新。
- 原图 URL 刷新走 `sync_original_asset_urls()`:相同 URL 复用原 asset 并更新顺序,不再出现的 URL 标记 `missing`,不物理删除历史记录。
- `docs/04-architecture.md` 已补充 AI工场原主图读取的 CDP 约束。
- 测试覆盖:已开 Chrome 复用、未开 Chrome 启动、明确未登录阻断、`NO_SESSION_COOKIE` 不确定登录继续、商品失效 toast 文案上浮、成功读取 1..9 张 URL、重复刷新幂等、自动新建/复用 tab 清理接口,以及成功路径不调用标题修改/封面替换/点击更新。
- 验证:在只套用 T-587 diff 的 clean worktree 中运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(350 tests)和 `git diff --check`,全部通过。
- 真实蝦皮只读实跑未执行:本轮未指定可用的已登录测试账号别名;为避免擅自打开真实浏览器,只做 mock/CDP 合约验证,后续接 GUI 前可用测试账号对 ITEM_ID 51100639510 做一次只读确认。