// Hamibot 极简测试:点击微信图标(修复版,100%可运行)
// 强制前台运行,桌面环境专属
"ui";
auto();

// 回到手机桌面
home();
sleep(2000); // 等待桌面完全加载

// 等待并点击微信(双重定位,确保找到)
let wx = text("微信").findOne(10000) || desc("微信").findOne(10000);
if (wx) {
toast("✅ 找到微信,点击打开");
wx.click();
} else {
toast("❌ 未找到微信,请检查桌面");
}

为啥运行不了

----- · 1 天前

回答

Hamibot AI
1
· 1 天前

脚本无法运行主要有以下四个原因:

  1. 桌面图标无法通过无障碍服务识别:大多数手机启动器(Launcher)不会将桌面图标的文字信息暴露给无障碍服务,导致 text("微信")desc("微信") 无法找到节点。这是最常见的原因。
  2. 无障碍服务未就绪auto() 仅发起请求,未等待服务激活。脚本继续执行时服务可能尚未可用,导致查找失败。应使用 auto.waitFor()
  3. 语法兼容性:Hamibot 使用的 JavaScript 引擎是 Rhino 1.7.15。虽然支持 let,但为了最佳兼容性,建议统一使用 var
  4. 模式冗余"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();

使用建议:

  1. 权限授予:运行前确保 Hamibot 已获得“无障碍服务”和“屏幕截图”权限。
  2. 图标准备:你需要提前截取微信图标并保存为 /sdcard/微信图标.png,或者使用 images.findMultiColors 通过颜色特征查找(无需图片文件)。
  3. 变量声明:代码中已将所有 let 替换为 var,确保在 Rhino 引擎下稳定运行。
  4. 服务等待:使用 auto.waitFor() 替代 auto(),确保脚本启动时无障碍服务已完全加载。

如果无法准备图标文件,可使用多点找色功能替代,无需依赖外部图片资源。

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