手机上面的浮窗元素如何抓取

已存档
nnhu4rqy42 · 30 天前

回答

Hamibot AI
1
· 30 天前

在手机上抓取悬浮窗(浮窗)元素,主要分为两种情况:抓取系统或其他应用的悬浮窗,以及抓取你自己用 Hamibot 脚本创建的悬浮窗

情况一:抓取系统或其他应用的悬浮窗

如果你想用 Hamibot 识别并操作屏幕上已经存在的其他应用或系统的悬浮窗(比如某个游戏的小窗口、音乐播放器的控制栏等),你需要使用 Hamibot 的控件查看器和基于无障碍服务的控件操作函数。

具体步骤和核心方法是:

  1. 开启无障碍服务:在 Hamibot 设置中为你的脚本启用无障碍服务权限,这是自动化操作的基础。
  2. 使用控件查看器分析
    • 打开 Hamibot App,进入你想要编写或运行的脚本界面。
    • 点击右上角的“▶️”按钮启动控件查看器
    • 将蓝色的定位准心拖动到你想抓取的悬浮窗上,查看器会显示该悬浮窗的所有层级信息和控件属性(如 text, id, className, bounds 等)。
  3. 在脚本中编写代码定位
    • 根据控件查看器分析出的属性,使用 id(), text(), className(), bounds() 等选择器来定位目标控件。
    • 常用的函数是 click(), longClick(), setText() 等。

代码示例(假设要点击一个悬浮窗上的按钮):

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

// 通过文本内容定位并点击
click('开始游戏');
// 或者通过组合选择器更精确地定位
id('button_start').click();
// 如果悬浮窗位置固定,也可以通过坐标点击
click(500, 300);

情况二:抓取你自己用 Hamibot 脚本创建的悬浮窗

如果你使用 Hamibot 的 floaty 模块创建了悬浮窗,那么抓取并操作其内部的元素非常简单,你不需要使用控件查看器或无障碍服务。

你创建悬浮窗后,会返回一个窗口对象(FloatyWindowFloatyRawWindow)。你可以直接通过这个对象和你在布局中为控件设置的 id 来获取并操作它们。

核心方法:
使用 window.{id} 来获取悬浮窗界面上的元素。例如,你在布局中给一个文本控件设置了 id="text",那么用 window.text 就能获取到它。

代码示例:

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

// 1. 创建悬浮窗,并为text控件设置id
var w = floaty.window(
  <frame gravity="center">
    <text id="myText" text="初始文本" />
    <button id="myButton" text="点击我" />
  </frame>
);

// 2. 直接通过窗口对象w和id来操作控件
// 修改文本内容(必须在ui线程中执行)
ui.run(function() {
  w.myText.setText('文本已被更改!');
});

// 为按钮设置点击监听(也必须在ui线程中执行)
ui.run(function() {
  w.myButton.setOnClickListener(function() {
    toast('按钮被点击了!');
    w.myText.setText('点击后的新文本');
  });
});

// 5秒后关闭悬浮窗
setTimeout(() => {
  w.close();
}, 5000);

总结

抓取对象 使用方法
系统或其他应用的悬浮窗 使用 Hamibot 的控件查看器分析,配合 click(text), id().click()无障碍服务函数。
Hamibot 自建的悬浮窗 使用 floaty.window() 返回的窗口对象,通过 window.你设置的id 来直接操作。

根据你的具体需求,选择对应的方法即可。

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