fix: 采集后关闭自动新建商品页
- 新增 close_tab 和 create_tab_info,区分断开 CDP 连接与关闭浏览器 target - open_product 标记商品页是否本轮自动新建,collect 结束后只关闭自动新建 tab - 保留用户原本打开的商品 tab,③ 更新流程暂不自动关闭页面 - 补充 editor tab 生命周期测试并同步架构、API、任务和进度文档
This commit is contained in:
+12
-3
@@ -191,8 +191,9 @@ is_running(port, host="127.0.0.1") -> bool
|
||||
|
||||
```python
|
||||
CDP_HOST: str
|
||||
http_get(path, host=None); find_product_tab(item_id, host=None); create_tab(url, host=None)
|
||||
class CDP: send/ev/val/object_id/drag/close # suppress_origin、trust_env=False
|
||||
http_get(path, host=None); find_product_tab(item_id, host=None); create_tab_info(url, host=None); create_tab(url, host=None)
|
||||
close_tab(target_id, host=None) -> bool # 关闭浏览器 target/page;区别于 CDP.close()
|
||||
class CDP: send/ev/val/object_id/drag/close # close 只断开 WebSocket;suppress_origin、trust_env=False
|
||||
```
|
||||
|
||||
## editor 模块(`app/editor.py`,已建,重构自现有脚本)
|
||||
@@ -200,7 +201,7 @@ class CDP: send/ev/val/object_id/drag/close # suppress_origin、trust_env=Fals
|
||||
```python
|
||||
login_status(account, timeout=8) -> dict # {logged_in, reason, url, host, cookie_names}
|
||||
is_logged_in(account) -> bool # login_status(...).logged_in;重定向登录页或缺 SPC_ST/SPC_U → False
|
||||
open_product(account, item_id) -> CDP # 连端口、导航商品页、等就绪
|
||||
open_product(account, item_id) -> CDP # 连端口、导航商品页、等就绪;标记该 tab 是否本轮自动新建
|
||||
|
||||
# 采集(只读)
|
||||
read_title(cdp) -> str
|
||||
@@ -218,6 +219,13 @@ apply_task(account, task) -> dict # 对已生成任务:换标题+
|
||||
|
||||
`login_status()` 不自动登录;无 Shopee tab 时打开卖家中心根地址 `https://<region_host>/`(默认 `https://seller.shopee.tw/`)用于检测/人工登录。判断规则:最终 URL 是登录页 → `LOGIN_PAGE`;缺少 `SPC_ST`/`SPC_U` → `NO_SESSION_COOKIE`;有会话 Cookie → 已登录。
|
||||
|
||||
采集 tab 生命周期:
|
||||
|
||||
- `CDP.close()` 只断开当前 websocket 控制连接,不关闭 Chrome 页面。
|
||||
- `open_product()` 若复用已存在商品 tab,则标记为用户已有页面;若调用 `create_tab()` 新建,则记录 target id。
|
||||
- `collect()` 结束时只关闭本轮自动新建的商品编辑页 tab;用户原本打开的商品 tab 不关闭。
|
||||
- ③ 更新流程暂不自动关闭商品页:成功后是否关闭留待后续体验任务,失败时保留现场便于排查。
|
||||
|
||||
## ai 模块(`app/ai.py`,已建,外部 AI,通用 HTTP)
|
||||
|
||||
```python
|
||||
@@ -314,6 +322,7 @@ TAB_STYLE: str # 顶层 Tab 栏防误点样式:
|
||||
- 账号列优先显示匹配到的 `accounts.account_name`;未匹配账号时保留 Excel 输入账号名。
|
||||
- 别名未匹配 `accounts.alias` 时列表阶段列显示“略过”;点击「采集旧标题/旧封面」后由 `CollectWorker` 逐条写库为 `skipped`,原因 `别名未匹配账号`。
|
||||
- 「采集旧标题/旧封面」通过 `CollectWorker` 后台执行,只处理 `stage=imported` 的任务;采集前先做账号就绪预检。无账号、当前批次匹配账号未启动 CDP 端口或未登录时,返回 `blocked=True`,GUI 弹窗汇总并跳转/引导去④账号管理,不进入逐条采集、不写 skipped/failed。预检通过后,已匹配任务调用 `editor.collect()` 下载旧封面到 `image_dir/<slug>/<item_id>_old.jpg` 并 `db.set_collected()`;别名未匹配任务仍逐条 `mark_skipped`;单条失败 `mark_failed(..., "collect", error)` 后继续。采集完成且本轮成功采集数量大于 0 时,自动触发当前批次旧字段回写;锁文件失败时只提示,不回滚 SQLite。
|
||||
- 采集打开商品页时,若本轮自动新建 tab,采集完成/失败后会关闭该 tab;若复用用户已打开的商品页,只断开 CDP 连接不关闭页面。
|
||||
- 「停止」调用 worker 的协作式 `cancel()`,已开始的单条跑到安全边界后结束。
|
||||
- 「回写旧数据到 Excel」通过 `WriteBackWorker` 后台调用 `excel.write_back()`,把已采集旧标题/旧封面路径按原 Excel 行定位写回;该按钮主要作为自动回写失败后的手动重试入口。原文件被占用时弹窗提示关闭后重试,SQLite 采集结果不回滚。
|
||||
- 采集前由 `CollectWorker` 做账号就绪预检:无账号、当前批次匹配账号未启动 CDP 端口或未登录时,返回 `blocked=True`,GUI 弹窗汇总并跳转/引导去④账号管理;不无提示批量启动所有账号 Chrome。匹配账号未登录属于预检阻断,不是逐条 skipped。
|
||||
|
||||
Reference in New Issue
Block a user