# 154 兼容不暴露滚动属性的 PDD 规格面板 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 / Client 可运行任务闭环 - 状态:已完成,待用户验收 - 日期:2026-08-11 - Gitea 工单: ## 背景与目标 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 规格面板