Client:规格面板临时空控件树稳定读取 #162

Closed
opened 2026-08-11 16:24:24 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / Client 可运行任务闭环
  • 阶段:PDD 规格面板稳定性
  • 关联工单:#115、#137、#154、#155、#160
  • 状态:待验收

要解决什么

Client 采集商品 339317949086 时已经进入规格面板,但后续读取到 PDD 渲染期间的临时空控件树,立即报 PDD_DATA_SPEC_INCOMPLETE:规格面板没有可识别的规格区域。失败 XML 中 PDD 只有空容器,没有规格标题、选项和滚动区域。当前默认尺码检查、颜色遍历和滑动后读取会直接解析单次 dump,缺少瞬态空树等待。

做什么 / 不做什么

  • 做:增加统一的等待有效规格面板控件树方法。
  • 做:PDD 仍在前台但控件树暂时为空时短间隔重读。
  • 做:默认尺码、面板回顶、颜色点击/滑动和尺码采集使用稳定读取。
  • 做:失败时保存最后有效规格树和最后异常树。
  • 不做:不改变颜色蛇形顺序、默认尺码取消规则、缺价规则、数据库或 Admin 接口。

已确认的实现方案

  1. 维护最后一棵确认有效的规格面板 XML。
  2. 稳定读取循环 dump 并复用现有解析;仅对 PDD_DATA_SPEC_INCOMPLETE 瞬态重试,明确特殊页立即停止。
  3. 后续坐标只来自最新有效 XML。
  4. 规格阶段的直接 dump/parse 和滑动变化等待跳过临时空树。
  5. 等待耗尽抛出 PDD_PAGE_SPEC_PANEL_LOST,保存最后有效树和最后异常树。
  6. Fake Device 覆盖“有效 → 空树 → 有效”和持续空树超时。

预计修改:

  • client/src/pdd_collect_service.py
  • client/test/test_pdd_collect_service.py
  • docs/task/<工单号>-规格面板临时空树稳定读取.md

验收标准

  • 临时空树后能等待下一棵有效树继续采集。
  • 默认尺码、颜色点击、水平/纵向滑动和尺码采集不直接解析空树。
  • 恢复后只使用最新有效树坐标。
  • 持续空树有限时间返回 PDD_PAGE_SPEC_PANEL_LOST。
  • 诊断同时包含最后有效规格树和最后异常树。
  • 精确测试、Client 全量测试和 py_compile 通过。

验证方式

从 client/ 执行:

C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
C:/Python310/python.exe -m py_compile src/pdd_collect_service.py test/test_pdd_collect_service.py

不执行真机采购、下单或付款。

风险和回退

重试有短超时并受整体超时限制;验证码、登录、售罄和设备断开不得被吞掉。回退本工单提交即可。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 / Client 可运行任务闭环 - 阶段:PDD 规格面板稳定性 - 关联工单:#115、#137、#154、#155、#160 - 状态:待验收 ## 要解决什么 Client 采集商品 339317949086 时已经进入规格面板,但后续读取到 PDD 渲染期间的临时空控件树,立即报 `PDD_DATA_SPEC_INCOMPLETE:规格面板没有可识别的规格区域`。失败 XML 中 PDD 只有空容器,没有规格标题、选项和滚动区域。当前默认尺码检查、颜色遍历和滑动后读取会直接解析单次 dump,缺少瞬态空树等待。 ## 做什么 / 不做什么 - 做:增加统一的等待有效规格面板控件树方法。 - 做:PDD 仍在前台但控件树暂时为空时短间隔重读。 - 做:默认尺码、面板回顶、颜色点击/滑动和尺码采集使用稳定读取。 - 做:失败时保存最后有效规格树和最后异常树。 - 不做:不改变颜色蛇形顺序、默认尺码取消规则、缺价规则、数据库或 Admin 接口。 ## 已确认的实现方案 1. 维护最后一棵确认有效的规格面板 XML。 2. 稳定读取循环 dump 并复用现有解析;仅对 `PDD_DATA_SPEC_INCOMPLETE` 瞬态重试,明确特殊页立即停止。 3. 后续坐标只来自最新有效 XML。 4. 规格阶段的直接 dump/parse 和滑动变化等待跳过临时空树。 5. 等待耗尽抛出 `PDD_PAGE_SPEC_PANEL_LOST`,保存最后有效树和最后异常树。 6. Fake Device 覆盖“有效 → 空树 → 有效”和持续空树超时。 预计修改: - client/src/pdd_collect_service.py - client/test/test_pdd_collect_service.py - docs/task/<工单号>-规格面板临时空树稳定读取.md ## 验收标准 - [x] 临时空树后能等待下一棵有效树继续采集。 - [x] 默认尺码、颜色点击、水平/纵向滑动和尺码采集不直接解析空树。 - [x] 恢复后只使用最新有效树坐标。 - [x] 持续空树有限时间返回 `PDD_PAGE_SPEC_PANEL_LOST`。 - [x] 诊断同时包含最后有效规格树和最后异常树。 - [x] 精确测试、Client 全量测试和 py_compile 通过。 ## 验证方式 从 `client/` 执行: C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py" C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" C:/Python310/python.exe -m py_compile src/pdd_collect_service.py test/test_pdd_collect_service.py 不执行真机采购、下单或付款。 ## 风险和回退 重试有短超时并受整体超时限制;验证码、登录、售罄和设备断开不得被吞掉。回退本工单提交即可。
Author
Owner

实施完成,等待验收

  • 实现提交:bd1d095
  • 归档提交:f859b58
  • 归档:docs/task/162-规格面板临时空控件树稳定读取.md
  • 采集服务专项测试:53 项通过
  • Client 完整回归:410 项通过
  • py_compile:通过

自动化已覆盖有效面板与空树交替、持续空树有界失败、有效/异常双份证据以及验证码不被吞掉。未执行真机采购、下单或付款。请真机重新采集商品 339317949086 验收。

## 实施完成,等待验收 - 实现提交:`bd1d095` - 归档提交:`f859b58` - 归档:`docs/task/162-规格面板临时空控件树稳定读取.md` - 采集服务专项测试:53 项通过 - Client 完整回归:410 项通过 - `py_compile`:通过 自动化已覆盖有效面板与空树交替、持续空树有界失败、有效/异常双份证据以及验证码不被吞掉。未执行真机采购、下单或付款。请真机重新采集商品 `339317949086` 验收。
Author
Owner

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:ad44f83。现关闭工单。

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:58:15 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#162