用 Auto.js 实现挂机脚本:从找图点击到循环自动化
介绍 Auto.js 在安卓上做自动化脚本的典型思路:截图 → 找图/找色/控件识别 → 点击与等待 → 循环执行;给出权限申请、找图点击的完整示例与挂机循环写法,并提醒仅限在允许的场景使用、遵守应用与平台规则。
一、Auto.js 是什么、能做什么
Auto.js 是一个在 Android 上运行的 JavaScript 自动化环境,通过内置的「截图、找图、找色、控件操作、点击、滑动」等 API,用脚本模拟人手操作,实现定时任务、重复操作、挂机类自动化。常见用途包括:自动签到、自动收菜、自动化测试、批量操作等。仅限在应用与平台允许的范围内使用,避免违反 ToS 或相关规范。
核心能力可以概括为:
- 截图:截取当前屏幕,供后续识别。
- 图像识别:在截图中查找目标图片(找图)或指定颜色(找色),得到坐标后执行点击。
- 控件识别:通过无障碍服务获取界面控件树,按文本、id、类名等定位后点击(Auto.js Pro 等版本支持更完善)。
- 模拟操作 :
click、swipe、longClick、input等,模拟用户操作。 - 循环与等待 :
sleep()、setInterval或while实现挂机式的「反复执行」。
挂机脚本的本质就是:在一个循环里,不断「截图 → 识别目标 → 执行操作 → 等待」,下面按这个思路展开。
二、挂机脚本的典型思路
无论是「自动点某个按钮」还是「到时间就收菜」,流程都可以抽象成:
- 获取当前画面 :
captureScreen()截图(或通过无障碍拿控件)。 - 识别目标 :找图(
findImage)、找色(findColor)、或控件选择器(text("确定").findOne())。 - 执行操作 :根据坐标或控件执行
click、swipe等。 - 等待与循环 :
sleep(ms)后进入下一轮,避免操作过于密集,也便于等待界面刷新。
识别方式简单对比:
- 找图:适合固定图标、按钮截图,分辨率或主题变化可能导致匹配失败,可调相似度与区域。
- 找色:适合单色或小色块,速度快,但界面颜色一变就失效。
- 控件:依赖无障碍,稳定性好,但部分界面无法取到控件(如游戏内绘图)。
挂机脚本里常用「找图 + 兜底找色」或「控件 + 兜底找图」,按实际界面选择即可。
三、环境与权限
- 运行环境:Android 设备上安装 Auto.js 或 Auto.js Pro,将脚本放入其脚本目录或通过 IDE 运行。
- 必要权限 :
- 无障碍服务:在系统设置中为 Auto.js 开启,用于控件识别和部分模拟操作。
- 悬浮窗:若需要脚本界面或悬浮控制,需开启悬浮窗权限。
- 截图权限 :
requestScreenCapture()会弹出申请,用户同意后即可截屏(部分机型需在「安全/隐私」里单独允许)。
首次运行找图相关代码时,按提示授权即可;若授权失败,脚本应 toast() 提示并 exit(),避免后续报错。
四、实战:找图点击 + 挂机循环
下面是一个「在屏幕上找目标图并点击,找不到则等待后重试」的挂机式循环示例。你只需准备一张要点击的小图(如按钮截图),保存到手机存储,并把路径改成你自己的。
javascript
// 请求截图权限,失败则退出
if (!requestScreenCapture()) {
toast("请授予截图权限");
exit();
}
var targetImgPath = "/sdcard/button.png"; // 替换为你的目标小图路径
var checkInterval = 2000; // 每轮间隔(毫秒)
var maxRounds = 100; // 最大执行轮数,可按需修改或改为 while(true)
var template = images.read(targetImgPath);
if (!template) {
toast("无法读取目标图片: " + targetImgPath);
exit();
}
for (var i = 0; i < maxRounds; i++) {
var cap = captureScreen();
var point = images.findImage(cap, template, {
threshold: 0.8,
region: [0, 0, cap.getWidth(), cap.getHeight()]
});
if (point) {
var x = point.x + template.getWidth() / 2;
var y = point.y + template.getHeight() / 2;
click(x, y);
toast("第 " + (i + 1) + " 轮已点击");
sleep(1500);
} else {
toast("第 " + (i + 1) + " 轮未找到目标");
}
cap.recycle();
sleep(checkInterval);
}
template.recycle();
toast("挂机结束");
要点说明:
- requestScreenCapture() :首次会弹窗,用户同意后返回
true。 - images.findImage(cap, template, options) :在截图
cap里找template,threshold为相似度 0~1,可酌情调高降低误点、调低提高容错;region可缩小范围加快速度。 - click(x, y) :点击中心点,用
point.x/y加上半宽半高得到中心。 - recycle():释放图片内存,避免长时间挂机占用过大。
- sleep():每轮间隔,避免操作过于频繁,也留给界面刷新时间。
若要一直挂机 ,可把 for 改成 while (true),并在循环内加退出条件(如检测到某张「结束」图就 break)。
五、可选增强与注意点
5.1 找色作为兜底
若目标区域颜色较固定,可用 images.findColor() 找色得到坐标再点击,作为找图失败时的补充(接口用法请查当前使用版本的文档)。
5.2 随机延迟
挂机时可在 sleep 里加随机数,例如 sleep(1000 + random(500)),避免固定节奏被识别为脚本(仅做技术介绍,实际使用须遵守应用规则)。
5.3 控件选择器(Auto.js Pro)
若目标应用界面有控件树,可用选择器精确定位,例如:
javascript
var btn = text("确定").findOne(3000);
if (btn) btn.click();
再配合 while 循环和 sleep,即可做成「等按钮出现就点」的挂机逻辑。具体 API 以你所用版本文档为准。
5.4 合规与资源释放
- 合规:挂机脚本仅限在应用与平台允许的场景使用,不得用于作弊、刷量等违反 ToS 的行为;游戏、账号类操作请务必遵守规则。
- 资源 :长时间运行务必对截图、模板图等调用
recycle(),避免内存持续增长导致卡顿或崩溃。
六、总结与参考
- Auto.js 在 Android 上通过 JS 脚本调用截图、找图、找色、控件、点击等 API,实现自动化与挂机。
- 挂机脚本通用思路:循环执行「截图 → 识别(找图/找色/控件)→ 点击或其它操作 → sleep 等待」。
- 实战时先申请 requestScreenCapture() ,用 images.findImage() 找图并计算中心点 click() ,注意 recycle() 和 sleep(),再根据需要加找色、控件或随机延迟。
- 使用前请确认应用与平台允许自动化,并遵守相关规则。
参考:
- Auto.js 文档(以你使用的版本为准)
- Auto.js Pro 等分支的官方文档与社区
如果你有具体界面或需求,可以在上述循环里替换目标图路径、识别方式或退出条件即可套用。觉得有用欢迎点赞、收藏或评论区交流你的使用场景。