我昨天升级到8.0.69微信版本的那台设备,脚本启动后,按照正常路径去爬取:微信通讯录——公众号——进入公众号列表,划过所有公众号——逐一点开公众号检查是否有新文章。但是我发现,在这个8.0.69版本上,通过上述路径点进去的公众号不显示更新的文章,导致脚本只能爬到0篇文章。请问这个问题该如何解决?是因为新的脚本版本在8.0.69运行不稳定吗?回到8.0.14更好?
回答
这个问题并非Hamibot脚本本身不稳定,而是微信8.0.69版本对公众号列表或文章展示页面的UI结构、组件属性或渲染逻辑进行了调整。基于UI自动化的脚本在目标应用更新后,常因选择器失效、节点层级变化或懒加载机制改变导致抓取结果为0。
你可以按以下步骤排查并适配:
-
重新抓取UI布局树
在8.0.69设备上运行Hamibot的布局分析功能,对比旧版微信的节点结构。重点检查公众号列表页和文章详情页的id、className、depth、text是否发生变化。微信常将列表容器从ListView改为RecyclerView,或调整子节点层级,需同步更新选择器。 -
适配动态加载与懒渲染
新版微信可能改为滑动触发加载或延迟渲染文章列表。进入公众号后,不要立即读取节点,应先执行滑动操作触发加载,并配合循环等待目标元素出现:// 文档地址 https://docs.hamibot.com/ var maxRetry = 5; var retry = 0; while (retry < maxRetry) { swipe(device.width / 2, device.height * 0.8, device.width / 2, device.height * 0.3, 300); sleep(800); var articleNode = className("TextView").textMatches(/.*阅读|.*赞|.*分钟前/).findOne(1500); if (articleNode) { break; } retry++; } -
增加选择器容错与版本分支
为关键节点配置多套选择器,并按微信版本动态切换。避免硬编码单一id或depth:// 文档地址 https://docs.hamibot.com/ var pkg = "com.tencent.mm"; var versionCode = app.versionCode(pkg); var listSelector; if (versionCode >= 2140) { listSelector = className("androidx.recyclerview.widget.RecyclerView").depth(12); } else { listSelector = className("android.widget.ListView").depth(10); } var container = listSelector.findOne(3000); if (!container) { log("未找到列表容器,请检查选择器或微信版本"); } -
验证入口路径是否变更
微信部分版本已将公众号入口从“通讯录”迁移至“聊天列表顶部”或“发现-看一看”。你可以在8.0.69上手动走一遍原路径,确认页面标题、按钮文本是否一致。若路径已废弃,需调整脚本的点击导航逻辑。
关于是否退回8.0.14:降级可临时恢复运行,但存在安全风险且无法长期维护。建议优先适配新版UI结构。若你的设备需同时运行多个微信版本,可在脚本初始化阶段读取app.versionCode("com.tencent.mm"),动态加载对应的选择器配置与滑动参数。
最佳实践建议:
- 使用
findOne(timeout)替代无限等待,避免脚本卡死。 - 关键操作后添加
sleep()与元素存在性校验,确保页面渲染完成后再执行下一步。 - 定期在测试机上验证微信小版本更新,维护一套版本兼容的选择器字典。
- 开启Hamibot日志与截图功能,记录每次抓取失败时的界面状态,便于快速定位失效节点。
如仍无法确定具体失效的组件,可提供Hamibot运行日志或布局树信息,我将协助你调整选择器与等待逻辑。