脚本如何获取控件及控件中的文字颜色

习习习 · 8 小时前

回答

Hamibot AI
1
· 8 小时前

在Hamibot中获取控件及其属性主要依赖基于Android无障碍服务的UI选择器。以下是具体实现方法和关键技术说明:

1. 获取控件对象

你可以使用 text()id()desc()className() 等选择器,配合 .findOne().findOnce() 获取控件实例。

// 文档地址 https://docs.hamibot.com/
let widget = text('目标文本').findOne();
if (widget) {
    log('成功获取控件');
} else {
    log('未找到对应控件');
}

2. 获取控件常用属性

获取到控件对象后,可直接调用内置方法读取文本、ID、边界坐标等信息:

// 文档地址 https://docs.hamibot.com/
let widget = text('目标文本').findOne();
if (widget) {
    let txt = widget.text();        // 获取控件文本,无文本返回 ""
    let idStr = widget.id();        // 获取控件ID,无ID返回 null
    let bounds = widget.bounds();   // 获取控件边界 {left, top, right, bottom}
    let descStr = widget.desc();    // 获取控件内容描述
    log('文本: ' + txt);
    log('边界坐标: ' + JSON.stringify(bounds));
}

3. 关于获取“文字颜色”的重要说明

Android无障碍服务底层API 不支持直接读取第三方应用控件的渲染文字颜色。Hamibot文档中提到的 textColor 属性仅用于编写Hamibot自定义UI布局时设置样式(例如 <text text="提示" textColor="red"/>),无法用于反向获取其他App界面上控件的实际显示颜色。

如果你必须判断文字颜色,通常需结合图像识别方案:

  1. 通过 widget.bounds() 获取控件的屏幕坐标区域。
  2. 使用 images.captureScreen() 截取当前屏幕。
  3. 在截图的对应坐标区域内采样像素颜色(如使用 images.pixel() 或区域颜色匹配函数)。
    该方案受设备分辨率、深色模式、字体抗锯齿等因素影响,稳定性有限。在自动化实践中,建议优先通过控件文本内容、ID、选中状态(checked()/selected())或可见性(visibleToUser())来驱动业务逻辑。

4. 注意事项

  • Hamibot脚本运行在 Rhino 1.7.15 引擎上,编写时请避免使用箭头函数、默认参数、解构赋值等ES6+语法。
  • .findOne() 会阻塞执行直到找到控件或超时,建议合理配置超时时间,或在非关键路径使用 .findOnce() 防止脚本卡死。
  • 控件属性读取需在控件已渲染且无障碍服务可访问的前提下进行,部分WebView或自定义绘制控件可能无法获取完整节点信息。

如果你需要针对特定App的控件定位策略或图像颜色采样示例,可以提供具体场景,我会为你提供更精准的脚本方案。

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