AutoJs 4.1.1 实战教程

Auto.js 中文文档https://hyb1996.github.io/AutoJs-Docs/#/?id=综述

pro 版本支持 Node.js 

AutoJs Pro 7.0.4-1 实战教程---史上最全快手、抖音极速版

示例:

关键字:类似 autojs  、autojs 综合实战

资料:

Autojs 从入门到放弃(AcFun 视频)

AutoJS4.1.0实战教程:https://blog.csdn.net/zy0412326/article/details/104767602/

https://blog.csdn.net/zy0412326/article/details/105710886/

autojs 之权限大全

autojs之权限大全 - 知乎

1、前言

 Auto.js 是一个支持无障碍服务的 Android 平台上的 JavaScript IDE。Autojs 主要是基于安卓系统的无障碍服务,实现自动化操控和监控手机信息处理。

根据官方文档定义:Auto.js 是一款无需 root 权限的 JavaScript 自动化软件。如何理解它?

  1. Auto.js 是一款安卓手机应用,和微信一样,安装在手机上使用
  2. Auto.js 是一款自动化软件,根据脚本内容便可以自动地执行相关的操作,并且手机无需root
  3. Auto.js 的脚本需要使用JavaScript编写

特性:

  • 由无障碍服务实现的简单易用的自动操作函数
  • 悬浮窗录制和运行
  • 更专业&强大的选择器 API,提供对屏幕上的控件的寻找、遍历、获取信息、操作等。类似于 Google 的 UI 测试框架 UiAutomator,您也可以把他当做移动版UI测试框架使用
  • 采用 JavaScript 为脚本语言,并支持代码补全、变量重命名、代码格式化、查找替换等功能,可以作为一个 JavaScript IDE 使用
  • 支持使用 e4x 编写界面,并可以将 JavaScript 打包为 apk 文件,您可以用它来开发小工具应用
  • 支持使用 Root 权限以提供更强大的屏幕点击、滑动、录制功能和运行 shell 命令。录制录制可产生js文件或二进制文件,录制动作的回放比较流畅
  • 提供截取屏幕、保存截图、图片找色、找图等函数
  • 可作为 Tasker 插件使用,结合 Tasker 可胜任日常工作流
  • 带有界面分析工具,类似 Android Studio 的 LayoutInspector,可以分析界面层次和范围、获取界面上的控件信息

app: 应用。启动应用,卸载应用,使用应用查看、编辑文件、访问网页,发送应用间广播等。console: 控制台。记录运行的日志、错误、信息等。device: 设备。获取设备屏幕宽高、系统版本等信息,控制设备音量、亮度等。engines: 脚本引擎。用于启动其他脚本。events: 事件与监听。按键监听,通知监听,触摸监听等。floaty: 悬浮窗。用于显示自定义的悬浮窗。files: 文件系统。文件创建、获取信息、读写。http: HTTP。发送HTTP请求,例如GET, POST等。images, colors: 图片和图色处理。截图,剪切图片,找图找色,读取保存图片等。keys: 按键模拟。比如音量键、Home键模拟等。shell: Shell命令。threads: 多线程支持。ui: UI界面。用于显示自定义的UI界面,和用户交互。

除此之外,Auto.js内置了对Promise。

2、安装

各个版本区别:

  • 4.1.1 版本:免费版的最后一个版本,可以在所有 app 上进行操作
  • 7.0. 版本:收费版,已经停售,
  • 8.0 pro 版本:屏蔽掉一些大平台,例如:微信、支付宝、抖音 等。。。
  • 三个版本功能区别不大, 主要在一些打包细节,功能函数的优化,bug修复等有些区别,其他没啥区别,4.1.1 版本完全可以满足几乎所有需求。。。

免费版已更新至 4.1.1 并且不再更新,在网上搜索 autojs.apk 下载安装即可。Auto.js 因某种原因全网下架(黑灰产) 。可以从 github 上下载源码编译安装。 github 地址:https://github.com/hyb1996/Auto.js

最新版已经开始收费,下载地址:Auto.js Pro

  • 手机安装 Auto.js 应用
  • 开启手机无障碍服务,目的是为了让脚本能执行。
  • 开启悬浮框(为了查看控件信息)
  • 电脑上有代码编辑器,vscode最佳(Auto.js作者提供了vscode的插件便于调试)

 接下来需要写脚本了,可以

  • 在vscode上写脚本,写好后发给手机,在Auto.js应用中加载运行
  • 在vscode上写脚本,电脑与手机在同一局域网,通过安装auto.js的 vscode插件 ( https://github.com/hyb1996/Auto.js-VSCode-Extension ),实现在vscode上运行,手机就会相应执行脚本
  • 在手机的 Auto.js 应用中直接码代码(不提倡)

3、示例:领取淘宝喵币

1. 打开淘宝 ---> 点击领喵币按钮

为了编写脚本简单,淘宝预先打开喵铺主页

auto.waitFor()
var appName = "手机淘宝";
launchApp(appName);
sleep(3000);
//寻找领喵币按钮并点击
var lingmiaobi = text("领喵币").findOnce();
if (lingmiaobi) {
    lingmiaobi.click();
    sleep(1000);
}
else {
    toast("未检查到领喵币按钮");
    //中止脚本
    exit();
}

详解:

  1. Auto.js无需root,但是需要对该应用开启无障碍模式,开启后才可以进行屏幕点击等操作auto.waitFor()表示直到检查该应用开启无障碍后才执行其后面的代码,否则一直卡在这里,一般放到脚本的第一行
  2. launchApp()可以打开对应应用,由于不同手机响应速度不同,本代码让它睡眠3s。
  3. 定位组件是autojs的最常见的操作,这很类似前端的定位dom元素。在任何点击之前都需要找到对应的组件,这不同于点击某像素位置,点击组件更能适配不同分辨率的手机。在auto.js中通过各种条件选取到的控件称为UiSelector (  https://hyb1996.github.io/AutoJs-Docs/#/widgetsBasedAutomation?id=uiselector )。那么筛选条件是如何确定呢?打开Auto.js应用的悬浮窗,在喵铺主页,点击Auto.js悬浮窗后选择出现的蓝色按钮,点击布局范围分析后选择领喵币按钮查看控件信息,你就能看到如图2所示的信息。
  4. click() 表示点击该元素。
  5. toast() 表示展示一个消息框。

 

 

 2. 点击去进店/去浏览

//开始执行任务
execTask();
function execTask() {
    while(true) {
        var target =  text("去进店").findOnce() || text("去浏览").findOnce();
        if (target == null) {
            toast("任务完成");
            break;
        }
        target.click();
        sleep(3000);
        //浏览网页20s
        viewWeb(20);
        back();
        sleep(1000);
    }
}

 viewWeb 是一会要写的函数,目的是模拟浏览网页20s的操作,虽说淘宝要求15s就行了,但是可能部分手机加载耗时比较多,所以多写了5s。当判断任务栏有"去进店"、"去浏览"的组件时,点击跳转至浏览广告,浏览完毕后,返回至任务栏页面,循环执行该操作直到找不到"去进店"、"去浏览"的组件结束(任务完成后按钮文字会变成"已完成")。

 

 3. 浏览广告

function viewWeb(time) {
    gesture(1000, [300, 600], [300, 300]);
    var cnt = 1;
    while(true) {
        var finish = desc("任务完成").exists() || textStartsWith("已获得").exists();
        if (finish || cnt > time) {
            break;
        }
        sleep(1000);
        cnt += 1;
    }
    //模拟返回键,返回到任务栏页面
    back();
}

函数的参数为当前页面的最大停留时间(防止意外而一直停留该页面)。

浏览广告完成的标志:

  • 当前页面出现"任务完成"或"已获得*****"的组件
  • 位于当前页面的时间大于所设定的最大限制

gesture 是指屏幕滑动操作,这是本文唯一涉及屏幕像素的语句。gesture(duration, [x1, y1], [x2, y2]表示用duration的时间,从(x1,y1)点滑到(x2,y2)点,代码中表示如图用1s从黄点滑向红点,故是上滑操作浏览广告。

本次淘宝的活动最开始滑动一次,之后等着时间够了即可,故代码中没有再额外滑动。在浏览广告完毕后back()模拟返回键返回值任务栏页面。

这段代码定位组件用到了desc(),之所于用desc是因为该控件的desc信息是"任务完成",还记得如何查看控件信息吧?总之,想定位控件,就先去查它的控件信息。 

4. 测试

代码终于写完了,将脚本发到手机中,在Auto.js应用点击右下角的+号,选择导入,在文件目中寻找对应的脚本加载。

将淘宝打开至喵铺主页,返回 Auto.js,点击运行即可执行脚本,在日志处可以查看脚本运行日志,我还没提到日志?在脚本中你可以使用 log() 函数记录日志,这等同于 print,常用于调试或记录日志信息。

5. 打包成 apk

编写完代码,将代码打包成一个独立的 apk。

  1. 右下角+号,新建文件夹命名为 double11
  2. 在 double11 文件夹中加载对应脚本
  3. 如图选择,打包 apk

6. 选择、定位

1. 选择器筛选条件:除使用 text、desc 筛选选择器外,组件的大多数属性都可以筛选,详情见官方文档。单一的筛选条件常常无法定位到元素,那么可以进行链式调用。如定位任务栏的关闭×按钮:

className("android.widget.Button").depth(18).indexInParent(1).findOnce();

2. 定位选择器:findOnce() 表示找到第一个满足条件的控件,找不到返回null;另外还有findOne(),findOne(time)等方法,具体的可以看文档。这里有一个坑,findOne()如果没找到匹配的组件会一直找,直至所描述的控件出现为止,故该函数不会返回null,找不到可能会卡在这里,所以谨慎使用。

3. click():当定位的元素的clickable属性为true时,才可以点击,如果你查看某控件的clickable为false,那说明此控件不能点!!你可能是想点击它的子/父控件。

源码参考 https://github.com/ErazerControl/2019double11,切换 tag 至 v1.0.0

7. 示例:滚动浏览朋友圈

示例代码:

function print_lian_xi_ren(){
    /* 找控件 */
    log(text("通讯录").findOne().parent().parent());
    /* 当找到的控件 的 "点击属性" 是 false 时,可能是这个控件本身嵌套在另一个控件中,
        外层控件是内层控件的父控件,查看父控件是否可点击,
        如果父控件 的 "点击属性" 仍然是 false 时,继续查找父控件,
        直到找到 "点击属性" 是 true 时,即可 点击
    */
    var btn_txl = text("通讯录").findOne().parent().parent();
    btn_txl.click();
    sleep(1000)

    /* 打印联系人 */
    var lxr = id("com.tencent.mm:id/ft6").find()
    lxr.forEach(element => {
        people_name = element.text();
        log(people_name);
        click(people_name);
        sleep(1000);
        back();
        sleep(1000);
    });
}

function cha_kan_peng_you_quan(){
    /* 控件坐标 */
    var bounds = text("发现").findOne().bounds()
    var x = bounds.centerX();
    var y = bounds.centerY();
    click(x,y);
    sleep(3000)

    var btn_pyq = text("朋友圈").findOne();
    x = btn_pyq.bounds().centerX();
    y = btn_pyq.bounds().centerY();
    click(x,y);
    sleep(1000);

    var android_widget = className("android.widget.ListView")
    while(true){
        /* 滚动浏览朋友圈 */
        android_widget.scrollDown();
        sleep(1000);
    }
}

auto.waitFor();
// home();
var app_name = "微信"
app.launchApp(app_name);
sleep(1000)

print_lian_xi_ren();
cha_kan_peng_you_quan()

事件与监听 - Events详细讲解

From ( 事件与监听 - Events详细讲解 QQ消息、微信消息 通知服务 ):https://www.bilibili.com/video/BV14g4y1q7mr

/*等待界面出现出现的三种方法*/

//方法 1
while(true){
    if(text("控件上的文字").exists()){
        break;
    }
}

//方法2
text("控件上的文字").waitFor();

//方法3
text("控件上的文字").findOne();

示例:

// 启用按键监听
evenntsevents.observeKey();

// 监听音量 上键 按下
events.onKeyDown("volume_up", function(event){
    toast("音量上键被按下");
});

events.onKeyDown('volume_down', function(){
    toast("菜单键被按下");
    exit();
});
  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AutoJS 4.1.1 界面设计简洁明了,分为脚本编辑和控制台两部分。脚本编辑界面提供了丰富的代码编辑功能,如语法高亮、自动补全等,方便用户编写脚本。同时也支持多窗口编程,可以方便地进行脚本调试和定位问题。 控制台界面则提供了脚本运行时的一些信息和调试工具,如日志输出、变量监控、UI查看等。用户可以通过控制台界面实时查看脚本运行状态,方便调试和优化。 AutoJS 4.1.1 界面整体设计简洁明了,符合用户使用习惯,操作也比较直观。同时还支持自定义皮肤,用户可以根据自己的喜好进行个性化设置。总之,AutoJS 4.1.1 界面设计在功能性和用户体验方面都做得比较出色,是一款不错的自动化脚本工具。 ### 回答2: AutoJS 4.1.1 的界面设计整体来说相对简洁实用。主界面分为左侧导航栏和右侧编辑器面板,左侧导航栏包含了脚本列表和一些常用功能按钮,方便用户对脚本进行管理。右侧编辑器面板则是编写脚本的主要区域,可以高亮显示语法以及提供自动补全等功能。在编辑器面板下方,AutoJS 4.1.1 提供了终端面板,方便用户在执行脚本时查看输出和错误信息。此外,界面右上角还提供了一些常用的快捷操作按钮。 虽然界面设计比较简单,但是从使用效果上考虑,AutoJS 4.1.1 的界面设计还是十分实用的。界面布局合理、操作简单,能够满足用户的日常使用需求。同时,在用户体验上也做得相当不错,细节处理得当,使得用户使用起来非常舒适。尽管对于一些高级用户来说,AutoJS 4.1.1 的界面设计可能略显简陋,但是对于大多数普通用户来说,AutoJS 4.1.1 的界面设计还是非常不错的。 ### 回答3: AutoJS 4.1.1是一款面向Android系统的JavaScript开发工具,它允许用户使用JavaScript语言编写脚本,来自动化完成一系列的任务。在AutoJS 4.1.1的界面设计上,可以说是非常简洁和直观的。 在桌面下拉菜单中,用户可以直接选择新建脚本或运行已有脚本。脚本编辑器界面上,左侧为文件列表区,右侧为代码编辑区。编辑器支持代码高亮、缩进、自动补全等基本的开发功能,对于初学者而言,上手非常容易。 在AutoJS 4.1.1中,还支持多窗口设计,即在同一个脚本文件中,可以设定多个界面,实现多个功能的切换。同时,AutoJS 4.1.1的脚本执行监控界面,可以清晰展示脚本执行过程中的各项数据,帮助开发者排查问题。 总的来说,AutoJS 4.1.1的界面设计是非常高效和实用的,对于JavaScript开发者和想要自动化完成一些任务的用户来说,都是值得一试的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值