回答
微信出于安全和隐私保护,对无障碍服务获取文本进行了限制,导致 text() 获取为空。这是正常现象,可通过以下三种方案解决:
方案一:使用 OCR 识别(推荐)
最可靠方案。通过截图识别屏幕文字,不受无障碍限制。需申请截图权限。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 请求截图权限
if (!requestScreenCapture()) {
toast("需要授予截图权限");
stop();
}
// 截取屏幕
var img = captureScreen();
// 执行 OCR 识别
var result = images.ocr(img);
// 遍历识别结果
for (var i = 0; i < result.length; i++) {
var text = result[i].text;
log("识别到文本:" + text);
// 可根据文本内容定位坐标
// var x = result[i].bounds.centerX();
// var y = result[i].bounds.centerY();
// click(x, y);
}
方案二:使用 desc() 获取描述
部分控件将文本存储在 contentDescription 中,尝试用 desc() 选择器。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 尝试通过描述查找
var w = desc("聊天").findOne(2000);
if (w) {
log("找到控件:" + w.desc());
w.click();
}
方案三:使用 id() 或特征定位
如果控件有稳定的资源 ID,可直接通过 ID 定位,无需获取文本。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 通过 ID 查找
var w = id("com.tencent.mm:id/xxx").findOne(2000);
if (w) {
log("找到控件 ID");
w.click();
}
最佳实践建议
- 优先 OCR:微信界面复杂且文本动态变化,OCR 识别率最高,适配性最好。
- 混合使用:结合
desc()和className()缩小范围,再对特定区域进行 OCR,可提高识别速度和准确率。 - 权限配置:使用 OCR 必须授予 Hamibot「截图权限」,首次运行会弹窗请求。
- 性能优化:OCR 消耗较高,建议识别特定区域而非全屏。使用
images.clip()截取局部后再识别。var clip = images.clip(img, x, y, width, height); var result = images.ocr(clip);
若 OCR 识别效果不佳,可尝试调整识别区域或集成第三方高精度 OCR 服务。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实