免Root自动点击与找图找色实操:屏幕上没有控件怎么办
自动化脚本最理想的情况是屏幕上每个按钮都能按名字、按 ID 精准定位;但真实场景里总会遇到"控件读不出来"的时刻——游戏里的图标按钮、视频播放器上的浮层、自绘界面里的一张图。这时脚本就得学会"看图做事":找色、找图、识字。本篇把这四条操作路线摆在一起讲清楚各自的适用场合,示例以安卓端 JavaScript 自动化工具 Autox.js 的写法为准。
工具的安装与权限配置见 autox-js.gltd.quest,入门路径(含录制与第一个脚本)见安卓手机自动化脚本入门,本篇直接从"动手方式"讲起。
一、四条路线,一张表选型
| 场景 | 首选路线 | 原因 |
|---|---|---|
| 普通应用界面(设置、聊天工具等) | 控件选择器 | 最稳最快,跨机型通用 |
| 按钮位置固定、颜色会变 | 找色 / 颜色检测 | 最轻量,几乎不耗资源 |
| 图标固定、颜色文字都变 | 找图(模板匹配) | 拿小图当模板,整屏里找 |
| 只有文字可依赖且无控件 | OCR 文字识别 | 最重,但唯一能"读懂内容" |
混合使用是常态:控件找外框、坐标点中心,截图判断状态,OCR 兜底认字。
二、控件定位补课:两个高频技巧
控件写法的基础是 text()、id()、desc() 这类选择器,实战中最常用的两个补充技巧:
控件不可点时,点它的中心。有些控件 clickable 属性是 false,直接 click() 无效,换成按边界点中心:
let w = desc("更多").findOne(5000);
if (w) {
click(w.bounds().centerX(), w.bounds().centerY());
}
获取坐标用系统工具。开发者选项里的「指针位置」会实时显示触点坐标;这套工具自带的界面分析浮层更方便——点哪个控件就高亮哪个,坐标、ID、文字一目了然。
三、找色:最轻量的状态判断
判断"某个位置是不是某个颜色"就能解决很多问题:按钮亮没亮、进度条满没满、红点出没出现。
if (!requestScreenCapture()) { toast("没有截图权限"); exit(); }
sleep(1000); // 等截图通道就绪
let img = captureScreen(); // 抓当前屏幕
let ok = images.detectsColor(img, "#11ff33", 100, 200);
toast(ok ? "颜色匹配" : "不匹配");
三个要点:
- 色值别靠猜:先截一张图,用取色工具读目标点的真实色值;
- 阈值要留余量:屏幕色彩差异与压缩会让色值漂移,
detectsColor默认带相似度容忍,误判多就调小阈值、漏判多就调大; - 要找"出现的位置"而不只是真假,用
findColor一类函数,它直接返回坐标。
四、找图:拿一张小图当模板
目标按钮形状固定、文字颜色都多变时,用模板匹配:截一张包含目标的小图,裁到只含按钮本身,存进脚本目录:
let tpl = images.read("button.png"); // 模板图放脚本目录
let p = images.findImage(captureScreen(), tpl);
if (p) {
click(p.x, p.y);
} else {
toast("没找到按钮");
}
最大的坑是分辨率:模板图用什么分辨率截的,运行时的手机就得是同样分辨率,跨分辨率分发脚本时匹配率会暴跌。模板越小、越独特,找得越快越准,别拿半张屏幕当模板。
五、OCR:把屏幕上的字读出来
画面上只剩文字可依赖时(图片里的说明、聊天内容、扫描结果),走 OCR。7.x 分支内置了 PaddleOCR 模型,开箱可用;老版本的函数形式差异较大,动手前先翻内置文档。
套路固定三步:截图 → 交给 OCR 模块拿到文字与位置 → 对文字做判断(识别到"开始"就点它的坐标)。注意两点:
- OCR 比找色找图慢得多,首次运行还要加载模型,能不用就不用;
- 艺术字、小字号、低对比度仍然不稳,脚本里要留"识别不到怎么办"的分支。
六、截图授权这道关
所有"看图"路线的前提都是拿到屏幕画面。首次执行截图请求时系统会弹「将开始截取屏幕内容」确认框,点「立即开始」才行;这份授权每次运行脚本都要过一遍(弹窗点一下即可),错过或拒绝时截图函数会报错或返回空,重跑重新授权就好。
另外注意系统限制:从 Android 10 起,应用在后台无法自行拉起界面,后台脚本里请求截图授权会没反应——先回到工具里把脚本跑起来,再让它弹授权窗。
七、把路线串起来
实际脚本往往是"控件点九成、截图点一成":主流程用控件选择器稳稳推进,个别读不出控件的环节用找色或找图判断状态。从装工具到跑通第一段脚本的操作顺序,整理在 autox-js.gltd.quest;先把安卓手机自动化脚本入门里的基础句式练熟,再照本篇给画面类场景补上"眼睛",一条完整的自动化链路就成形了。