一、工具下载安装

手机端:auto.js(百度即可)
PC端:  VS Code     JDK      SDK Tools(定位工具: Uiautomatorviewer


VS Code 用于代码编写 Uiautomatorviewer用于元素定位,也就是APP的界面分析

下载地址:
VS code:https://code.visualstudio.com/

JDK网盘64位下载地址: https://pan.baidu.com/s/1dfhaoMVQLDqSOAj45aP4Lg

SDK下载(Android集成开发环境)链接:https://pan.baidu.com/s/1zYTq5Zv2yFjDyI8XyKoMUw 提取码:zovb

(JDK安装配置教程:)

SDK环境配置步骤:此电脑右键–>属性–>高级系统设置–>环境变量–>找到"Path"编辑–>新建–>浏览(找到Android集成开发环境的解压路径,定位到sdk目录级。如:E:\免安装软件\adt-bundle-windows-x86_64-20131030\adt-bundle-windows-x86_64-20131030\sdk)–>一路确定出来–>Dos命令行输入adb–>不提示adb不是内部命令就成功了

二、ADB及Uiautomatorviewer使用

1. 通过USB数据线将手机连接到电脑
2. 打开adb.exe       sdk安装目录 \ platform-tools \ adb.exe       输入命令(查看手机连接状态):

adb devices

3. 运行uiautomatorviewer.bat       sdk安装目录 \ tools \ bin \ uiautomatorviewer.bat

autojs调用python脚本 autojs脚本编写教程_自动阅读


4. uiautomatorviewer不能截取手机屏幕解决办法

(1)在电脑桌面创建两个文本文档并更改后缀名app.uix      app.png

(2)在电脑桌面文本文档并更改后缀名为 bat   右键编辑 > 输入以下内容 > 保存

@echo off

	>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
	
	if '%errorlevel%' NEQ '0' (
	
	echo 请求管理员权限...
	
	goto UACPrompt
	
	) else ( goto gotAdmin )
	
	:UACPrompt
	
	echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
	
	echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
	
	"%temp%\getadmin.vbs"
	
	exit /B
	
	:gotAdmin
	
	
	@echo on
	adb shell uiautomator dump /sdcard/app.uix
	adb pull /sdcard/app.uix  C:/Users/hjfdzd/Desktop/app.uix
	
	adb shell screencap -p /sdcard/app.png
	adb pull /sdcard/app.png C:/Users/hjfdzd/Desktop/app.png

5. 打开uiautomatorviewer点击打开    app.uix      app.png       即可分析app界面

三、PC端代码编写

1. PC端打开VS Code 点击EXTENSIONS 搜索Auto.js点击安装

autojs调用python脚本 autojs脚本编写教程_自动阅读_02


2. 开启Autojs服务 Ctrl + Shift + P > Autojs start server

3. 手机端打开Autojs开启无障碍服务,点击连接电脑输入电脑IP进行连接

autojs调用python脚本 autojs脚本编写教程_脚本_03

四、控件分析及代码编写

1.分析界面如下

autojs调用python脚本 autojs脚本编写教程_自动阅读_04

autojs调用python脚本 autojs脚本编写教程_脚本_05

2.找出视频红包对应右上角的  2

等待视频看结束点击关闭按钮,返回界面

autojs调用python脚本 autojs脚本编写教程_autojs调用python脚本_06


autojs调用python脚本 autojs脚本编写教程_脚本_07


3.代码如下:

/**
 * 定义控件btn,父控件btnParent, 关闭控件btnClose
 * 区域左上角顶点 boundLeft,boundTop 区域右下角顶点 boundRight,boundBottom
 * 手机适配比: 屏宽比 wRatio  屏高比  hRatio
 * 计数变量 count
 * 视频可点击总次数 total(需查找的控件  2 )
 * 最终点击坐标点 pointX,pointY
 */

var btn,btnParent,btnClose,boundLeft,boundTop,boundRight,boundBottom,wRatio,hRatio,count,total,pointX,pointY,flag;

//屏幕比用2280X1080的屏幕适配其他
wRatio = device.width / 1080;
hRatio = device.height / 2280;

/**
 * 通过uiautomatorviewer分析获得 2 所在控件 bounds=[219,1194][270,1245]
 * 其中:
 *      boundLeft = 219
 *      boundTop = 1194
 *      boundRight = 270
 *      boundBottom = 1245
 * 适配其他机型 只需横坐标乘以 wRatio  纵坐标乘以 hRatio
 */
boundLeft = 219 * wRatio;
boundTop = 1194 * hRatio;
boundRight = 270 * wRatio;
boundBottom = 1245 * hRatio;

/**
 * UiSelector.boundsInside(left, top, right, buttom)
 * 在bound区域内查找控件
 * 在bound区域内查找className("android.view.View") 即 2 所在控件
 */

btn = className("android.view.View").boundsInside(boundLeft,boundTop,boundRight,boundBottom).findOne(500);
//如果btn不为空
if(btn){
    flag = true;
    while (flag) {
        //获取文本控件  即 2
        total = btn.text();
        if (total!=null) {
            //寻找父控件
            btnParent = btn.parent().parent().parent();
            //找到父控件的区域
            boundLeft = btnParent.bounds().left;
            boundTop = btnParent.bounds().top;
            boundRight = btnParent.bounds().right;
            boundBottom = btnParent.bounds().bottom;
            //随机点击坐标
            pointX = Math.random()*(boundRight-boundLeft)+boundLeft;
            pointY = Math.random()*(boundBottom-boundTop)+boundTop;
            //点击
            click(pointX,pointY);
            console.log(pointX+","+pointY);
            //等待1s
            sleep(1000);
            //等待视频观看完毕
            while (flag) {
                //查找关闭按钮
                btnClose = id("com.xiangzi.jukandian:id/tt_video_ad_close_layout").findOne(500);
                if (btnClose) {
                    //点击关闭
                    btnClose.click();
                    sleep(1000);
                    //标识符置为false跳出循环
                    flag = false;
                }
                //查找关闭按钮
                btnClose = className("android.widget.TextView").text("关闭广告").findOne(500);
                if (btnClose) {
                    //点击关闭
                    btnClose.click();
                    sleep(1000);
                    //标识符置为false跳出循环
                    flag = false;
                }
                //查找关闭按钮
                btnClose = id("jump_tv").text("跳过").findOne(500);
                if (btnClose) {
                    //点击关闭
                    btnClose.click();
                    sleep(1000);
                    //标识符置为false跳出循环
                    flag = false;
                }
            }
            flag = true;
        }else{
            flag = false; 
        }
    }
}
五、总结

1.电脑编码容易便捷
2.uiautomatorviewer界面分析清晰,可轻易找到控件
3.uiautomatorviewer还有好多控件属性尚未列出,可结合autojs悬浮窗进行界面分析
注: