Files
cmautobuy/docs/task/154-兼容非滚动规格面板.md
T
2026-08-11 15:02:30 +08:00

2.9 KiB

154 兼容不暴露滚动属性的 PDD 规格面板

背景与目标

Client 采集商品时已经打开“确认款式”面板,但新版自绘面板没有任何 scrollable=true 节点。原代码把可滚动节点作为规格面板的必要条件,因此持续等待并 错误返回 SKU_PANEL_NOT_FOUND。

本任务兼容这种非滚动面板,同时保持严格证据,避免把普通商品页误判为规格面板。

最终方案

保留原有可滚动面板解析,增加非滚动面板的强证据定位。只有面板提示、已选或请选择 摘要、真实规格标题和可点击“确定”入口同时存在,且它们具有小于整个窗口的有界公共 父容器时,才认定规格面板已经打开。

解析时显式排除“确认款式/確認款式”面板标题,防止生成虚假的款式维度;使用第一个 真实规格标题顶部作为价格区边界,使面板头部的券后价格可以被读取。若兼容容器内部 仍有滚动节点,则继续优先使用原有滚动解析。

改了哪些

  • client/src/pdd_collect_service.py:增加非滚动面板定位、标题过滤及价格边界处理。
  • client/test/test_pdd_collect_service.py:增加解析、等待和误判回归测试。
  • client/test/fixtures/pdd_spec_panel_non_scrollable.xml:新增脱敏非滚动面板固件。

验收结果

验收标准 结果
非滚动面板被识别为已打开,不再等待超时 通过
只解析颜色和尺码,不把“确认款式”当维度 通过
解析出 5 个颜色、1 个尺码和券后价格 通过;价格 817 分
普通商品页和全窗口散落文字不被误判 通过
原有滚动面板和带数量标题测试保持通过 通过
未增加 sleep 或扩大超时时间 通过
精确测试、完整测试和语法检查通过 通过

测试

  • 执行的命令:C:/Python310/python.exe -m py_compile src/pdd_collect_service.py。
  • 结果:通过。
  • 执行的命令: C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py"。
  • 结果:40 项测试通过。
  • 执行的命令: C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"。
  • 结果:394 项测试通过;只有既存 Qt 字体和弃用警告。
  • 执行的操作:使用本次失败时保存的真实 XML 调用面板判定和解析函数。
  • 结果:panel_open=true,颜色 5、尺码 1、价格 817 分、已选摘要存在。
  • 没验证到的部分:未在真机上重新执行该商品采集;未执行采购或真实下单。

相关提交

  • fee8210 兼容非滚动 PDD 规格面板