你好,我计划开发个人微信的自动化聊天回复功能,请推荐:用什么方法可以识别出:微信页面的用户新消息?我打算用消息的红点,用什么方法可以正确识别出消息的红点?
我的手机是小米 9Pro,安卓13; 微信 8.0.76版本,可以用刚才的方法吗?或者请推荐适合的微信版本
回答
基于你提供的脚本示例,识别微信页面用户新消息(红点)的方法如下:
-
使用控件的
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("发现新红包"); // 点击进入会话 }这里以红包消息为例,但同样适用于普通聊天消息的红点判断。
-
通过
desc或text属性识别未读标识
微信页面中,红点通常表现为一个ImageView或TextView,其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 来判断,这是最稳定且兼容性好的方式,因微信版本迭代对红点控件的 desc 或 text 可能变化,但未读消息项的父控件通常只有一个子视图(即头像和昵称区域,红点作为单独元素不占子控件层级)。
基于你提供的控件识别方法,微信 8.0.76 版本在小米 9 Pro(安卓 13)上通常是可以使用的。childCount() == 1 的判断逻辑依赖于微信聊天列表的控件层级结构,这个结构在微信 8.0.x 系列中变化不大,因此你的版本大概率兼容。
如果你想更稳妥,推荐使用 微信 8.0.50 或 8.0.48 版本。这两个版本在 Hamibot 社区的脚本中适配度较高,控件层级稳定,更容易通过 childCount 或 desc 识别未读红点。你可以在手机自带应用商店的历史版本中查找,或通过官方渠道下载对应版本。
如果测试时发现 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 版本,并关闭微信的自动更新。