Client:兼容非滚动规格面板的颜色节点定位 #155

Closed
opened 2026-08-11 15:10:52 +08:00 by ila · 3 comments
Owner

基本信息

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

要解决什么

Client 重新采集商品 https://mobile.yangkeduo.com/goods.html?goods_id=897186799891 时返回:

PDD_DATA_SPEC_INCOMPLETE:规格面板没有可识别的颜色分类

本次失败 XML 已证明规格面板处于打开状态,parse_spec_panel() 能解析出 5 个颜色、1 个尺码和当前价格;但新版面板不暴露任何 scrollable=true 节点。_find_option_node() 仍强制要求颜色节点位于可滚动祖先内,导致 5 个具有有效坐标且 clickable=true 的颜色节点全部被过滤,_visible_color_rows() 返回空列表。

做什么 / 不做什么

  • 做:让颜色点击节点定位兼容 #154 已确认的非滚动规格面板。
  • 做:复用统一的强证据规格面板定位结果,避免解析逻辑与点击逻辑判断不一致。
  • 做:保留可点击、有效坐标、最小宽度和屏幕边界检查。
  • 做:增加颜色行识别回归测试,覆盖本次非滚动面板的 3 行 5 色结构。
  • 不做:不增加 sleep 或超时时间;不修改颜色价格业务规则、尺码规则、Admin 接口或任务状态。
  • 不做:不执行采购、下单或付款。

已确认的实现方案

  1. 调整 client/src/pdd_collect_service.py 的 _find_option_node():
    • 继续接受位于 scrollable=true 容器内的旧版规格节点;
    • 同时接受位于 _find_non_scrollable_spec_panel() 已通过强证据识别的面板内的规格节点。
  2. 节点仍必须满足文字精确匹配、clickable=true、坐标有效、宽度完整且中心点位于安全屏幕范围。
  3. 不对普通商品页启用无条件点击回退,避免误点页面同名文字。
  4. 使用现有脱敏非滚动规格面板固件增加测试,断言 _visible_color_rows() 返回 3 行、共 5 个颜色,并保持自然的从左到右顺序。
  5. 运行采集服务精确测试、Client 完整测试和语法检查。

预计修改:

  • client/src/pdd_collect_service.py
  • client/test/test_pdd_collect_service.py
  • 完成后归档 docs/task/<工单号>-兼容非滚动面板颜色节点.md

验收标准

  • 本次非滚动规格面板能识别 3 行、共 5 个颜色节点。
  • 颜色节点均保留正确文字、可用状态和点击坐标。
  • 现有可滚动规格面板的颜色识别保持通过。
  • 普通商品页中的同名文字不会被当作规格选项。
  • 不通过增加 sleep 或扩大超时时间掩盖问题。
  • Client 精确测试、完整 unittest 与 py_compile 通过。

验证方式

从 client/ 执行:

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

本任务使用脱敏 XML 固件验证,不执行真实下单。

风险和回退

  • 风险:放宽点击节点范围可能误选页面其他同名文字,因此只接受已通过多项强证据识别的规格面板后代。
  • 回退:恢复本工单代码提交即可;不涉及数据库迁移、Admin 接口和不可逆操作。
## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 / Client 可运行任务闭环 - 阶段:PDD 规格面板兼容 - 关联缺陷:#154 - 状态:待验收 ## 要解决什么 Client 重新采集商品 `https://mobile.yangkeduo.com/goods.html?goods_id=897186799891` 时返回: `PDD_DATA_SPEC_INCOMPLETE:规格面板没有可识别的颜色分类` 本次失败 XML 已证明规格面板处于打开状态,`parse_spec_panel()` 能解析出 5 个颜色、1 个尺码和当前价格;但新版面板不暴露任何 `scrollable=true` 节点。`_find_option_node()` 仍强制要求颜色节点位于可滚动祖先内,导致 5 个具有有效坐标且 `clickable=true` 的颜色节点全部被过滤,`_visible_color_rows()` 返回空列表。 ## 做什么 / 不做什么 - 做:让颜色点击节点定位兼容 #154 已确认的非滚动规格面板。 - 做:复用统一的强证据规格面板定位结果,避免解析逻辑与点击逻辑判断不一致。 - 做:保留可点击、有效坐标、最小宽度和屏幕边界检查。 - 做:增加颜色行识别回归测试,覆盖本次非滚动面板的 3 行 5 色结构。 - 不做:不增加 sleep 或超时时间;不修改颜色价格业务规则、尺码规则、Admin 接口或任务状态。 - 不做:不执行采购、下单或付款。 ## 已确认的实现方案 1. 调整 `client/src/pdd_collect_service.py` 的 `_find_option_node()`: - 继续接受位于 `scrollable=true` 容器内的旧版规格节点; - 同时接受位于 `_find_non_scrollable_spec_panel()` 已通过强证据识别的面板内的规格节点。 2. 节点仍必须满足文字精确匹配、`clickable=true`、坐标有效、宽度完整且中心点位于安全屏幕范围。 3. 不对普通商品页启用无条件点击回退,避免误点页面同名文字。 4. 使用现有脱敏非滚动规格面板固件增加测试,断言 `_visible_color_rows()` 返回 3 行、共 5 个颜色,并保持自然的从左到右顺序。 5. 运行采集服务精确测试、Client 完整测试和语法检查。 预计修改: - `client/src/pdd_collect_service.py` - `client/test/test_pdd_collect_service.py` - 完成后归档 `docs/task/<工单号>-兼容非滚动面板颜色节点.md` ## 验收标准 - [ ] 本次非滚动规格面板能识别 3 行、共 5 个颜色节点。 - [ ] 颜色节点均保留正确文字、可用状态和点击坐标。 - [ ] 现有可滚动规格面板的颜色识别保持通过。 - [ ] 普通商品页中的同名文字不会被当作规格选项。 - [ ] 不通过增加 sleep 或扩大超时时间掩盖问题。 - [ ] Client 精确测试、完整 unittest 与 py_compile 通过。 ## 验证方式 从 `client/` 执行: ```powershell C:/Python310/python.exe -m unittest test.test_pdd_collect_service C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" C:/Python310/python.exe -m py_compile src/pdd_collect_service.py ``` 本任务使用脱敏 XML 固件验证,不执行真实下单。 ## 风险和回退 - 风险:放宽点击节点范围可能误选页面其他同名文字,因此只接受已通过多项强证据识别的规格面板后代。 - 回退:恢复本工单代码提交即可;不涉及数据库迁移、Admin 接口和不可逆操作。
Author
Owner

实施中补充诊断

首次回归已验证颜色节点定位兼容生效,但同一函数还有第二层旧版假设:_visible_color_rows() 用“不得小于当前最宽按钮 60%”判断节点是否完整显示。该面板的按钮宽度由文字长度自适应,首个“测试黑色”宽 240,最长按钮宽 432,因 240 < 432 × 60% 被误判为横向截断。

这不是新的业务范围,仍属于“非滚动面板识别 3 行 5 色”的原验收项。实施调整为:

  • 已通过强证据确认的非滚动面板没有横向滚动视口,不使用按钮相对宽度判断截断;
  • 继续依靠节点有效坐标、屏幕安全边界和面板祖先关系确认完整性;
  • 旧版可滚动面板继续保留现有 60% 截断过滤,避免改变其滑动采集行为。

首次测试命令按模块导入失败,原因是 client/test 没有 __init__.py,后续统一使用 unittest discover。

## 实施中补充诊断 首次回归已验证颜色节点定位兼容生效,但同一函数还有第二层旧版假设:`_visible_color_rows()` 用“不得小于当前最宽按钮 60%”判断节点是否完整显示。该面板的按钮宽度由文字长度自适应,首个“测试黑色”宽 240,最长按钮宽 432,因 `240 < 432 × 60%` 被误判为横向截断。 这不是新的业务范围,仍属于“非滚动面板识别 3 行 5 色”的原验收项。实施调整为: - 已通过强证据确认的非滚动面板没有横向滚动视口,不使用按钮相对宽度判断截断; - 继续依靠节点有效坐标、屏幕安全边界和面板祖先关系确认完整性; - 旧版可滚动面板继续保留现有 60% 截断过滤,避免改变其滑动采集行为。 首次测试命令按模块导入失败,原因是 `client/test` 没有 `__init__.py`,后续统一使用 `unittest discover`。
Author
Owner

完成与归档

  • 修复非滚动规格面板中的颜色可点击节点定位,复用 #154 的强证据面板边界。
  • 修复自适应宽度按钮被旧版 60% 相对宽度规则误判为截断的问题;该变化只作用于强证据确认的非滚动面板。
  • 本次真实失败 XML 只读复验:3 行、共 5 个颜色,顺序正确。
  • 采集服务测试:42 项通过。
  • Client 完整回归:396 项通过。
  • py_compile:通过。
  • 实现提交:478b125 fix: 兼容非滚动面板颜色节点 (#155)
  • 归档提交:d7e548a docs: 归档任务 #155
  • 本地归档:docs/task/155-兼容非滚动面板颜色节点.md
  • 当前状态:待用户使用真机重新采集商品 897186799891 验收。

未验证:未执行真机重新采集;未执行采购、下单或付款。

## 完成与归档 - 修复非滚动规格面板中的颜色可点击节点定位,复用 #154 的强证据面板边界。 - 修复自适应宽度按钮被旧版 60% 相对宽度规则误判为截断的问题;该变化只作用于强证据确认的非滚动面板。 - 本次真实失败 XML 只读复验:3 行、共 5 个颜色,顺序正确。 - 采集服务测试:42 项通过。 - Client 完整回归:396 项通过。 - py_compile:通过。 - 实现提交:`478b125` `fix: 兼容非滚动面板颜色节点 (#155)` - 归档提交:`d7e548a` `docs: 归档任务 #155` - 本地归档:`docs/task/155-兼容非滚动面板颜色节点.md` - 当前状态:待用户使用真机重新采集商品 `897186799891` 验收。 未验证:未执行真机重新采集;未执行采购、下单或付款。
Author
Owner

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

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:58:03 +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#155