你好,我计划开发个人微信的自动化聊天回复功能,请推荐:用什么方法可以识别出:微信页面的用户新消息?我打算用消息的红点,用什么方法可以正确识别出消息的红点?

HAMI_6893877807 · 4 小时前
第 1 条补充
·
4 小时前

我的手机是小米 9Pro,安卓13; 微信 8.0.76版本,可以用刚才的方法吗?或者请推荐适合的微信版本

回答

Hamibot AI
1
· 4 小时前

基于你提供的脚本示例,识别微信页面用户新消息(红点)的方法如下:

  • 使用控件的 childCount() 判断
    在聊天列表页面,每条会话项(rp_msg_list[i])的父控件若无子控件(childCount() == 1),通常表示该会话有一条未读消息(即存在红点)。
    示例代码片段:

    // 文档地址 https://docs.hamibot.com/
    var rp_auk_parent = rp_auk.parent();
    if(rp_auk_parent.childCount() == 1){
        log("发现新红包");
        // 点击进入会话
    }
    

    这里以红包消息为例,但同样适用于普通聊天消息的红点判断。

  • 通过 desctext 属性识别未读标识
    微信页面中,红点通常表现为一个 ImageViewTextView,其 desc 可能为 "未读" 或数字,text 可能为空。可以使用 descContains("未读")descMatches(/\d+/) 进行匹配。
    例如:

    var unread = descContains("未读").findOne(500);
    if (unread) {
        // 存在未读消息
    }
    
  • 结合坐标点击
    确认红点后,通过获取父控件的 bounds() 获取坐标,然后 click() 进入会话。
    示例:

    var rpB = rp_auk_parent.bounds();
    click(rpB.left, rpB.top, rpB.right, rpB.bottom);
    

推荐方案:优先使用 childCount() == 1 来判断,这是最稳定且兼容性好的方式,因微信版本迭代对红点控件的 desctext 可能变化,但未读消息项的父控件通常只有一个子视图(即头像和昵称区域,红点作为单独元素不占子控件层级)。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 4 小时前

基于你提供的控件识别方法,微信 8.0.76 版本在小米 9 Pro(安卓 13)上通常是可以使用的。childCount() == 1 的判断逻辑依赖于微信聊天列表的控件层级结构,这个结构在微信 8.0.x 系列中变化不大,因此你的版本大概率兼容。

如果你想更稳妥,推荐使用 微信 8.0.50 或 8.0.48 版本。这两个版本在 Hamibot 社区的脚本中适配度较高,控件层级稳定,更容易通过 childCountdesc 识别未读红点。你可以在手机自带应用商店的历史版本中查找,或通过官方渠道下载对应版本。

如果测试时发现 childCount 方法失效,可以改用下列备用方案:

  • 通过 desc 匹配

    // 文档地址 https://docs.hamibot.com/
    var unread = descContains("未读").findOne(1000);
    if (unread) {
        // 存在未读消息
    }
    
  • 通过 drawingOrder 或层级组合
    部分微信版本中红点控件在 LinearLayout 内部,可以尝试:

    var badge = className("android.widget.TextView").descMatches(/\d+/).findOne(500);
    if (badge && badge.parent().childCount() == 2) {
        // 红点上的数字
    }
    

建议先用 8.0.76 跑一下测试脚本,若正常识别就不必降级。若遇到问题,再考虑安装 8.0.50 版本,并关闭微信的自动更新。

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