用 Auto.js 实现挂机脚本:从找图点击到循环自动化

用 Auto.js 实现挂机脚本:从找图点击到循环自动化

介绍 Auto.js 在安卓上做自动化脚本的典型思路:截图 → 找图/找色/控件识别 → 点击与等待 → 循环执行;给出权限申请、找图点击的完整示例与挂机循环写法,并提醒仅限在允许的场景使用、遵守应用与平台规则。


一、Auto.js 是什么、能做什么

Auto.js 是一个在 Android 上运行的 JavaScript 自动化环境,通过内置的「截图、找图、找色、控件操作、点击、滑动」等 API,用脚本模拟人手操作,实现定时任务、重复操作、挂机类自动化。常见用途包括:自动签到、自动收菜、自动化测试、批量操作等。仅限在应用与平台允许的范围内使用,避免违反 ToS 或相关规范。

核心能力可以概括为:

  • 截图:截取当前屏幕,供后续识别。
  • 图像识别:在截图中查找目标图片(找图)或指定颜色(找色),得到坐标后执行点击。
  • 控件识别:通过无障碍服务获取界面控件树,按文本、id、类名等定位后点击(Auto.js Pro 等版本支持更完善)。
  • 模拟操作clickswipelongClickinput 等,模拟用户操作。
  • 循环与等待sleep()setIntervalwhile 实现挂机式的「反复执行」。

挂机脚本的本质就是:在一个循环里,不断「截图 → 识别目标 → 执行操作 → 等待」,下面按这个思路展开。


二、挂机脚本的典型思路

无论是「自动点某个按钮」还是「到时间就收菜」,流程都可以抽象成:

  1. 获取当前画面captureScreen() 截图(或通过无障碍拿控件)。
  2. 识别目标 :找图(findImage)、找色(findColor)、或控件选择器(text("确定").findOne())。
  3. 执行操作 :根据坐标或控件执行 clickswipe 等。
  4. 等待与循环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 里找 templatethreshold 为相似度 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 等分支的官方文档与社区

如果你有具体界面或需求,可以在上述循环里替换目标图路径、识别方式或退出条件即可套用。觉得有用欢迎点赞、收藏或评论区交流你的使用场景。

相关推荐
SuperEugene1 小时前
表单最佳实践:从 v-model 到自定义表单组件(含校验)
前端·javascript·vue.js
昨晚我输给了一辆AE861 小时前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
不会敲代码11 小时前
深入浅出 React 闭包陷阱:从现象到原理
前端·react.js
不会敲代码11 小时前
React性能优化:深入理解useMemo和useCallback
前端·javascript·react.js
Dilettante2581 小时前
我的 Monorepo 实践经验:从基础概念到最佳实践
前端·前端工程化
只会cv的前端攻城狮2 小时前
Elpis-Core — 融合 Koa 洋葱圈模型实现服务端引擎
前端·后端
Java小卷2 小时前
流程设计器为啥选择diagram-js
前端·低代码·工作流引擎
HelloReader3 小时前
Isolation Pattern(隔离模式)在前端与 Core 之间加一道“加密网关”,拦截与校验所有 IPC
前端
兆子龙3 小时前
从 float 到 Flex/Grid:CSS 左右布局简史与「刁钻」布局怎么搞
前端·架构