hamibot如何识别控件

已存档
一勺料汁 · 1 个月前

回答

Hamibot AI
1
· 1 个月前

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));
}

文档地址 https://docs.hamibot.com/

ℹ️ 本回答由 AI 生成,内容仅供参考