小木自动点击器的可视化模式(拖点击点、配条件节点)能满足大部分需求,但有两类场景它表达不了:一是流程逻辑复杂、有随机策略或时间判断的;二是需要跨 App 调度的,比如「先打开微信,再切到浏览器」。这两类需求,得用它内置的 JS 脚本模式。
前提是你得会一点 JavaScript。不会写代码的看到这篇可以直接划走,可视化配置更适合你。
运行机制
项目切换到 JS 脚本模式后,代码在应用内置的 WebView 里跑,通过桥接层调用原生能力:无障碍手势(点击、滑动、返回、Home)、屏幕本地 OCR、App 拉起、日志。编辑器带语法高亮,脚本随项目存在本地,支持随项目导出分享。不需要 Root,不需要连电脑。
先看 API,一共就这几个:
sleep(ms) // 异步等待,配合 await
click(x, y, duration?) // 点击,坐标 0~1 屏幕比例,不传时长则随机
swipe(x1, y1, x2, y2, duration?) // 滑动,不传时长则随机 300~500ms
find_text(text, x1?, y1?, x2?, y2?) // OCR 找字,关键词逗号分隔,后四个参数是搜索区域
clickBack() / clickHome() // 返回键 / Home 键
openApp(packageName) // 按包名打开应用,如 openApp('com.tencent.mm')
openScheme(schemeUrl) // Deeplink 拉起,如 openScheme('taobao://...')
console.log / warn / error // 输出到应用内日志查看器
几个设计值得说一下。坐标全是 0 到 1 的比例值,脚本跨分辨率通用;时长参数留空的话底层会自己生成随机时长,动作不那么机械;find_text 是异步的,命中结果通过 onFindTextResult(result, text, x, y) 回调返回,x、y 直接可以喂给 click。
例子一:短剧自动跳广告
最经典的用法,十几行:
(async () => {
window.onFindTextResult = function (result, text, x, y) {
if (result) {
console.log('命中:' + text + ' 位置:(' + x + ',' + y + ')');
click(x, y);
}
};
async function loop() {
while (true) {
await sleep(1000);
find_text('skip,跳过,跳過', 0.5, 0, 1, 0.5); // 只搜右上角区域,识别更快
}
}
loop();
})();
每秒看一眼屏幕,发现目标立即点击。频率、关键词、搜索区域全由你定,比可视化模式自由度高不少。
例子二:任务编排(开 App → 操作 → 退出)
openApp 和 openScheme 让脚本能跨 App 调度:
(async () => {
await sleep(3000); // 延迟启动
openApp('com.xxx.game'); // 打开游戏
await sleep(8000); // 等启动加载
click(0.9, 0.9); // 点「活动」入口
await sleep(2000);
find_text('一键领取,领取全部'); // OCR 找领取按钮
await sleep(5000);
clickBack();
await sleep(1000);
clickHome();
})();
再配合 Date 对象判断当前时间,就能做出「每天早上八点自动签到」这类定时任务。
例子三:随机化挂机
JavaScript 的全部能力都在——随机数、数组、函数随便用。挂机时把操作序列随机化:
(async () => {
const actions = [
() => swipe(0.5, 0.7, 0.5, 0.3),
() => click(0.2 + Math.random() * 0.6, 0.2 + Math.random() * 0.6),
() => clickBack()
];
while (true) {
const act = actions[Math.floor(Math.random() * actions.length)];
act();
await sleep(2000 + Math.random() * 3000);
}
})();
每次循环的动作和间隔都不一样,比固定循环的脚本稳得多。
调试和其他
调试就两条:console.log 会通过桥接写进应用日志;设置里开调试模式,跑完到「查看日志」里看执行轨迹和 OCR 命中记录。
脚本模式不是要替代可视化模式。简单连点用可视化更快,条件分支用表单配也直观;脚本的价值在复杂流程和跨 App 调度。我的做法是同一个需求先用可视化搭,表达不了的部分再切脚本。
最后还是那句:脚本能力不小,别拿去干违反平台规则的事。
