回答
Hamibot 识别控件主要依赖控件属性和选择器语法,以下是关键方法:
一、基础属性定位
通过控件文本(text)、描述(desc)、ID(id) 等属性定位:
// 文本定位
text("登录").findOne().click();
// 描述定位(如无文本控件)
desc("日志").findOne().click();
// ID定位(常见于图标类控件)
id("action_log").findOne(6000).click();
二、属性组合筛选
当单一属性不唯一时,用链式条件组合过滤:
// 同时匹配文本和可点击状态
text("确认").clickable(true).findOne();
// 多属性组合定位
className("android.widget.Button")
.desc("提交")
.id("submit_btn")
.findOne();
三、查找模式区别
方法 | 行为特点 | 使用场景 |
---|---|---|
findOne() |
持续阻塞直到找到控件 | 静态界面稳定元素 |
findOne(6000) |
最多等待6秒,超时返回null | 需控制等待时间的场景 |
findOnce() |
仅查找一次,立即返回 | 动态内容需重复执行时 |
find() |
返回所有匹配控件集合 | 批量操作多个同类控件 |
四、可视化控件边界(调试用)
可通过 canvas 描绘控件轮廓辅助定位验证:
let bounds = text("日志").findOne().bounds();
// 创建全屏浮窗绘制边界
let window = floaty.rawWindow(<canvas id="c"/>);
window.setSize(-1,-1);
window.c.on("draw", (canvas) => {
canvas.drawRect(
bounds.left, bounds.top,
bounds.right, bounds.bottom,
new Paint().setColor("#FF0000")
);
});
五、OCR辅助识别(图片文字场景)
当控件属性缺失时,用 OCR 识别屏幕文字定位:
auto.waitFor();
requestScreenCapture();
const img = captureScreen();
const result = ocr.recognizeText(img);
if(result.includes("验证码")){
// 定位验证码区域坐标后截图识别
const codeImg = images.clip(img, 300, 500, 600, 600);
log("验证码:" + ocr.recognizeText(codeImg));
}
ℹ️ 本回答由 AI 生成,内容仅供参考