REST API 有什么作用

wrekemdkwh · 5 天前
第 1 条补充
·
4 天前

如何点击一个没有id,没有text,没有desc的控件

第 2 条补充
·
4 天前

如何遍历点击父控件下的子控件

回答

Hamibot AI
1
· 5 天前

Hamibot REST API 的主要作用是提供标准化的程序接口,允许外部系统通过 HTTPS 请求与 Hamibot 平台进行交互、集成和自动化管理。通过该接口,你可以远程管理资源、触发任务或查询状态,无需手动操作控制台。

其核心技术特性如下:

  1. 访问协议与地址
    所有 API 访问均通过 HTTPS 进行。

    • 主地址:https://api.hamibot.com/
    • 备用地址:https://api.hamibot.cn/(已备案,适用于小程序等场景)
  2. 身份验证
    接口采用个人访问令牌(Personal Access Token)进行验证。你需要前往控制台生成新令牌,并在 HTTP 请求标头中发送。
    示例 header:
    Authorization: hmp_...

  3. 速率限制与配额
    API 请求受速率限制保护,以防止滥用。请求返回的 HTTP 标头会显示当前速率限制状态,具体配额信息可前往控制台查询。

  4. 响应状态
    API 返回标准的 HTTP 状态码。例如在某些操作中,204 表示成功,422 表示参数错误。

  5. 集成示例
    你可以使用 curl 或其他 HTTP 客户端调用接口。以下是一个身份验证请求的示例:
    curl -H "Authorization: hmp_..." https://api.hamibot.com/

通过 REST API,你可以将 Hamibot 的自动化能力嵌入到自己的业务系统、CI/CD 流程或第三方应用中,实现更高效的自动化运维和管理。


补充回答 1

对于没有 id、text 和 desc 属性的控件,可以通过其他属性进行定位,或者获取其坐标后进行点击。Hamibot 支持多种控件属性选择器,包括 className、packageName、bounds、drawingOrder 等。

解决方法:

  1. 使用布局分析查看属性
    打开悬浮窗和无障碍服务,点击蓝色的悬浮窗图标,然后点击绿色的布局分析图标,选择布局范围分析。点击目标控件,查看其详细属性。除了 id、text、desc 外,重点关注以下属性:

    • className:控件类名,例如 android.widget.ImageView
    • packageName:控件所在应用的包名。
    • bounds:控件在屏幕上的范围。
    • drawingOrder:控件在父控件中的绘制次序(安卓 7.0 及以上有效)。
  2. 组合属性定位控件
    单一属性可能无法唯一确定控件,建议组合多个属性构建选择器。例如,同时指定 classNamepackageName,或者结合 bounds 范围。

  3. 获取坐标点击
    如果控件无法直接通过 click() 方法点击,或者定位后需要精确点击,可以使用 bounds() 获取控件屏幕范围,然后计算中心坐标进行点击。

代码示例:

// 文档地址 https://docs.hamibot.com/
// 通过 className 和 packageName 组合定位控件
var target = className('android.widget.ImageView').packageName('com.example.app').findOne();

if (target != null) {
    // 获取控件在屏幕上的范围
    var b = target.bounds();
    // 点击控件中心坐标
    click(b.centerX(), b.centerY());
} else {
    toast('未找到目标控件');
}

注意事项:

  • 选择器的条件通常需要可唯一确定控件,避免匹配到多个对象。
  • 如果控件位于列表中,可能需要遍历父控件的子控件进行查找。
  • 使用 bounds() 获取坐标后,配合全局 click(x, y) 函数可以实现模拟物理点击,适用于某些无障碍服务无法直接响应的控件。

补充回答 2

遍历点击父控件下的子控件主要有两种方式:使用 children().forEach() 方法或使用 for 循环配合 childCount()child(i)。这两种方法都可以有效获取父控件下的直接子控件集合并进行操作。

方法一:使用 children().forEach() 遍历

这种方式代码更简洁,适合直接对集合中的每个元素进行操作。

// 文档地址 https://docs.hamibot.com/
// 1. 找到父控件
var parent = className('android.widget.LinearLayout').findOne();

if (parent != null) {
    // 2. 获取子控件集合并遍历
    parent.children().forEach(function (child) {
        // 3. 判断控件是否存在且可点击
        if (child != null && child.clickable()) {
            child.click();
            sleep(1000); // 点击后等待,避免操作过快
        }
    });
} else {
    toast('未找到父控件');
}

方法二:使用 for 循环配合索引遍历

这种方式更灵活,可以在遍历过程中使用索引变量,适合需要根据索引进行特定逻辑处理的场景。

// 文档地址 https://docs.hamibot.com/
// 1. 找到父控件
var parent = className('android.widget.LinearLayout').findOne();

if (parent != null) {
    // 2. 获取子控件数量
    var count = parent.childCount();
    // 3. 通过索引遍历
    for (var i = 0; i < count; i++) {
        var child = parent.child(i);
        // 4. 判断控件是否存在且可点击
        if (child != null && child.clickable()) {
            child.click();
            sleep(1000);
        }
    }
} else {
    toast('未找到父控件');
}

关键注意事项:

  1. 空值检查:由于布局捕捉的问题,child(i) 或遍历得到的 child 可能为 null。务必在操作前判断 child != null,否则脚本会报错停止。
  2. 可点击性判断:建议先判断 child.clickable() 是否为 true,避免对不可点击的控件执行点击操作导致无效或报错。
  3. JavaScript 兼容性:Hamibot 使用的 JavaScript 引擎是 Rhino 1.7.15,编写脚本时请使用 function 关键字定义函数,不要使用箭头函数(=>),变量定义建议使用 var
  4. 父控件定位:确保父控件的选择器(如 className, id 等)能准确唯一地定位到目标区域,否则可能遍历错误的控件集合。
  5. 操作间隔:遍历点击时建议加入 sleep() 延时,给界面响应留出时间,防止因操作过快导致脚本异常或应用无响应。
ℹ️ 本回答由 AI 生成,内容仅供参考