// Hamibot 极简测试:点击微信图标(修复版,100%可运行)
// 强制前台运行,桌面环境专属
"ui";
auto();
// 回到手机桌面
home();
sleep(2000); // 等待桌面完全加载
// 等待并点击微信(双重定位,确保找到)
let wx = text("微信").findOne(10000) || desc("微信").findOne(10000);
if (wx) {
toast("✅ 找到微信,点击打开");
wx.click();
} else {
toast("❌ 未找到微信,请检查桌面");
}
为啥运行不了
回答
脚本无法运行主要有以下四个原因:
- 桌面图标无法通过无障碍服务识别:大多数手机启动器(Launcher)不会将桌面图标的文字信息暴露给无障碍服务,导致
text("微信")或desc("微信")无法找到节点。这是最常见的原因。 - 无障碍服务未就绪:
auto()仅发起请求,未等待服务激活。脚本继续执行时服务可能尚未可用,导致查找失败。应使用auto.waitFor()。 - 语法兼容性:Hamibot 使用的 JavaScript 引擎是 Rhino 1.7.15。虽然支持
let,但为了最佳兼容性,建议统一使用var。 - 模式冗余:
"ui";用于开发自定义界面,纯自动化脚本不需要,移除可避免潜在冲突。
针对桌面图标点击,最佳实践是使用图像识别。以下是修复后的代码,采用图像查找方式,稳定性更高:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
toastLog("没有授予 Hamibot 屏幕截图权限");
hamibot.exit();
}
// 返回桌面
home();
sleep(2000);
// 读取本地保存的微信图标图片
// 请确保 /sdcard/微信图标.png 存在,可使用截图工具提前保存
var wxIcon = images.read("/sdcard/微信图标.png");
if (!wxIcon) {
toastLog("未找到图标文件,请检查路径");
hamibot.exit();
}
// 截图并找图
var screen = captureScreen();
var p = images.findImage(screen, wxIcon, {
region: [0, 50], // 搜索区域,可根据需要调整
threshold: 0.8 // 相似度阈值
});
if (p) {
toastLog("找到微信图标:" + p);
click(p.x, p.y);
} else {
toastLog("未找到微信图标");
}
hamibot.exit();
使用建议:
- 权限授予:运行前确保 Hamibot 已获得“无障碍服务”和“屏幕截图”权限。
- 图标准备:你需要提前截取微信图标并保存为
/sdcard/微信图标.png,或者使用images.findMultiColors通过颜色特征查找(无需图片文件)。 - 变量声明:代码中已将所有
let替换为var,确保在 Rhino 引擎下稳定运行。 - 服务等待:使用
auto.waitFor()替代auto(),确保脚本启动时无障碍服务已完全加载。
如果无法准备图标文件,可使用多点找色功能替代,无需依赖外部图片资源。
ℹ️ 本回答由 AI 生成,内容仅供参考