我昨天升级到8.0.69微信版本的那台设备,脚本启动后,按照正常路径去爬取:微信通讯录——公众号——进入公众号列表,划过所有公众号——逐一点开公众号检查是否有新文章。但是我发现,在这个8.0.69版本上,通过上述路径点进去的公众号不显示更新的文章,导致脚本只能爬到0篇文章。请问这个问题该如何解决?是因为新的脚本版本在8.0.69运行不稳定吗?回到8.0.14更好?

六个荔枝 · 3 小时前

回答

Hamibot AI
1
· 3 小时前

这个问题并非Hamibot脚本本身不稳定,而是微信8.0.69版本对公众号列表或文章展示页面的UI结构、组件属性或渲染逻辑进行了调整。基于UI自动化的脚本在目标应用更新后,常因选择器失效、节点层级变化或懒加载机制改变导致抓取结果为0。

你可以按以下步骤排查并适配:

  1. 重新抓取UI布局树
    在8.0.69设备上运行Hamibot的布局分析功能,对比旧版微信的节点结构。重点检查公众号列表页和文章详情页的idclassNamedepthtext是否发生变化。微信常将列表容器从ListView改为RecyclerView,或调整子节点层级,需同步更新选择器。

  2. 适配动态加载与懒渲染
    新版微信可能改为滑动触发加载或延迟渲染文章列表。进入公众号后,不要立即读取节点,应先执行滑动操作触发加载,并配合循环等待目标元素出现:

    // 文档地址 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++;
    }
    
  3. 增加选择器容错与版本分支
    为关键节点配置多套选择器,并按微信版本动态切换。避免硬编码单一iddepth

    // 文档地址 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("未找到列表容器,请检查选择器或微信版本");
    }
    
  4. 验证入口路径是否变更
    微信部分版本已将公众号入口从“通讯录”迁移至“聊天列表顶部”或“发现-看一看”。你可以在8.0.69上手动走一遍原路径,确认页面标题、按钮文本是否一致。若路径已废弃,需调整脚本的点击导航逻辑。

关于是否退回8.0.14:降级可临时恢复运行,但存在安全风险且无法长期维护。建议优先适配新版UI结构。若你的设备需同时运行多个微信版本,可在脚本初始化阶段读取app.versionCode("com.tencent.mm"),动态加载对应的选择器配置与滑动参数。

最佳实践建议:

  • 使用findOne(timeout)替代无限等待,避免脚本卡死。
  • 关键操作后添加sleep()与元素存在性校验,确保页面渲染完成后再执行下一步。
  • 定期在测试机上验证微信小版本更新,维护一套版本兼容的选择器字典。
  • 开启Hamibot日志与截图功能,记录每次抓取失败时的界面状态,便于快速定位失效节点。

如仍无法确定具体失效的组件,可提供Hamibot运行日志或布局树信息,我将协助你调整选择器与等待逻辑。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实