Android⼿机上,利⽤bat脚本模拟⽤户操作
利⽤bat脚本模拟⽤户操作,需要⽤到两点:
①就是adb命令了,adb命令可以⽤来模拟⽤户在⼿机上的操作
②bat语⾔,就是批处理语⾔,主要⽤来进⾏逻辑处理,跟众多语⾔语法⼀样,批处理语⾔也包括for循环、if语句之类的语法;⼀、adb命令
⾸先我们来介绍模拟⽤户在⼿机上操作的adb命令
input keyevent //发送键盘事件
⽤法说明:
adb shell input keyevent “value”
usage: input ...
input text <string> //在EditText中输⼊字符串
input keyevent <key code number or name>  //模拟back键、home键、⾳量键等操作
input tap <x> <y> //模拟点击事件
input swipe <x1> <y1> <x2> <y2> //模拟滑动事件
看看上⾯的这四个命令是不是已经满⾜你⽇常使⽤了呢?
先列举input keyevent⼏个⽐较常⽤的code值:
input keyevent 3    // Home
input keyevent 4    // Back
input keyevent 19  //Up
input keyevent 20  //Down
input keyevent 21  //Left
input keyevent 22  //Right
input keyevent 23  //Select/Ok
input keyevent 24  //Volume+
input keyevent 25  // Volume-
input keyevent 82  // Menu 菜单~~~
下⾯来举个栗⼦:
①你可以先进⼊到adb shell中,再执⾏input keyevent "value",如下,看看是不是执⾏了home键的操作呢:
shell@android:/ $ input keyevent 3
②你也可以不进⼊adb shell中,直接执⾏(在bat脚本中写的时候当然要⽤这种啦~),如下:
adb shell input tap 1431850 //这是点击了横坐标为143、纵坐标为1850的像素点
adb shell input swipe 200100444666  //这是从坐标点(200,100)滑动到了坐标(444,666)
========================================
【快速获取想要点击图标像素点的技巧:】想要点击某个button,但是怎么快速获取该button的像素位置呢?
⼀般Android在[设置--⾼级设置--开发者选项]中,或者[设置--开发⼈员选项]中,有“指针位置”这⼀项,打开该开关
不要怀疑⽔印,我是从⾃⼰博客拿过来的:)
如上图,⽅框的位置就是你所点击的区域坐标点,注意,原坐标[0, 0]就是⼿机屏幕的左上⾓。
还有⼀点,如果你在屏幕滑动了⼀段距离,你想知道滑动距离的坐标数值差,也可以看到:
就是上图中的红⾊数值,[dX, dY]
==================================================
⼆、bat语⾔,批处理语⾔
1,基础语法
①.批处理⽂件是⼀个“.bat”结尾的⽂本⽂件,这个⽂件的每⼀⾏都是⼀条DOS命令。可以使⽤任何⽂
本⽂件编辑⼯具创建和修改。
②.批处理是⼀种简单的程序,可以⽤ if 和 goto 来控制流程,也可以使⽤ for 循环。
③.批处理的编程能⼒远不如C语⾔等编程语⾔,也⼗分不规范。
④.每个编写好的批处理⽂件都相当于⼀个DOS的外部命令,把它所在的⽬录放到DOS搜索路径(path)中,即可在任意位置运⾏。
⑤.C:\AUTOEXEC.BAT是每次系统启动时都会⾃动运⾏的,可以将每次启动时都要运⾏的命令放⼊该⽂件中。
⑥.⼤⼩写不敏感(命令符忽略⼤⼩写)
⑦.批处理的⽂件扩展名为 .bat 或 .cmd。
⑧.在命令提⽰下键⼊批处理⽂件的名称,或者双击该批处理⽂件,系统就会调⽤来运⾏该⽂件。
2,如何执⾏批处理⽂件
新建⼀个txt⽂本⽂件,写完代码之后,保存为XXX.bat⽂件,然后双击该⽂件就⾏~~~
auto.bat
3,先来⼏个常⽤的语法:
①注释:Rem或::
Rem 这是⼀⾏注释
:: 这也是⼀⾏注释
②打印个log啥的:echo命令
语法:echo [{on|off}] [message]
1), ECHO [message]显⽰信息,此句可以⽤来打log,例⼦如下:
不要怀疑⽔印,哈哈哈!
2), ECHO [ON | OFF]打开回显或关闭回显功能。echo off表⽰在此语句后所有运⾏的命令都不显⽰命令⾏本⾝,:
默认是on,on时会显⽰如图
如果改成off,off时会显⽰如下
3), ECHO显⽰当前回显设置。
显⽰当前回显设置
4), 在实际应⽤中我们会把这条命令和重定向符号( 也称为管道符号,⼀般⽤ > >> ^ )结合来实现输⼊⼀些命令到特定格式的⽂件中。echo Windows Registry Editor Version 5.00 > c:\ (此前还没有 这个⽂件)  ```
echo "SourcePath"="D:\Win2003\" >> c:\ (追加内容进 这个⽂件) ```
③ @命令
表⽰不显⽰@后⾯的命令,(在⼊侵过程中⾃然不能让对⽅看到你使⽤的命令啦)
@ 与echo off相象,但它是加在每个命令⾏的最前⾯,表⽰运⾏时不显⽰这⼀⾏的命令⾏(只能影响当前⾏)。
@echo off  (此语句常⽤于开头,表⽰不显⽰所有的命令⾏信息,包括此句)
@echo please wait
@format X: /q/u/autoset  ```
④ title 命令
给cmd窗⼝设置title
title 读取⽂件测试脚本
设置前
设置后
⑤ color命令:设置背景及字体颜⾊
语法:color bf
b 是指定背景⾊的⼗六进制数字; f 指定前景颜⾊(即字体颜⾊)。
颜⾊值: 0:⿊⾊ 1:蓝⾊ 2:绿⾊ 3:湖蓝 4:红⾊ 5:紫⾊ 6:黄⾊ 7:⽩⾊
8:灰⾊ 9:淡蓝 A:淡绿 B:浅绿 C:淡红 D:淡紫 E:淡黄 F:亮⽩
如果没有给定任何参数,该命令会将颜⾊还原到CMD.EXE启动时的颜⾊。
如果两参数⼀样,视为⽆效输⼊。只有⼀个参数时,设置字体。
⑥ Pause命令:
可以⾃⼰试⼀下,挺有⽤的功能,会暂停批处理的执⾏并在屏幕上显⽰Press any key 的提⽰,等待⽤户按任意键后继续⑦打开某⽹站
www.baidu
www.baidu
⑧延时执⾏下⼀句语句:
ping -n N 127.1 >nul
执⾏该语句,就会延迟执⾏N-1秒
5,Set语句
6,If语句
if 表⽰将判断是否符合规定的条件,从⽽决定执⾏不同的命令。有三种格式:
① IF
语法:if [not] "参数" == "字符串" 待执⾏的命令
参数如果等于(not表⽰不等,下同)指定的字符串,则条件成⽴,运⾏命令,否则运⾏下⼀句。(注意是两个等号)
if "%1" == "a" format a:
if {%1} == {} goto noparms
②if exist
语法: if [not] exist [路径\]⽂件名待执⾏的命令
如果有指定的⽂件,则条件成⽴,运⾏命令,否则运⾏下⼀句。
if exist config.sys edit config.sys  (表⽰如果存在这⽂件,则编辑它,⽤很难看的系统编辑器)
if exist config.sys type config.sys  (表⽰如果存在这⽂件,则显⽰它的内容)
3. if errorlevel number
语法: if [not] errorlevel <;数字> 待执⾏的命令
如果程序返回值等于指定的数字,则条件成⽴,运⾏命令,否则运⾏下⼀句。(返回值必须按照从⼤到⼩的顺序排列)
@echo off
XCOPY F:\test.bat D:\
IF ERRORLEVEL 1 (ECHO ⽂件拷贝失败
) Else IF ERRORLEVEL 0 ECHO 成功拷贝⽂件
pause
很多DOS程序在运⾏结束后会返回⼀个数字值⽤来表⽰程序运⾏的结果(或者状态),称为错误码errorlevel或称返回码。
常见的返回码为0、1。通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执⾏不同的命令。
④else
语法:if 条件 (成⽴时执⾏的命令) else (不成⽴时执⾏的命令)
如果是多个条件,建议适当使⽤括号把各条件包起来,以免出错。
if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else (echo comment3 )
注:如果 else 的语句需要换⾏,if 执⾏的⾏尾需⽤“^”连接,并且 if 执⾏的动作需⽤(括起来),否则报错
if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) ^
else (echo comment3 )
⑤⽐较运算符:
EQU - 等于  (⼀般使⽤“==”)
NEQ - 不等于 (没有 “!=”,改⽤“ if not1==1 ”的写法)
LSS - ⼩于
LEQ - ⼩于或等于
GTR - ⼤于
GEQ - ⼤于或等于
7,Goto语句
语法:goto label(label是参数,指定所要转向的批处理程序中的⾏。)
指定跳转到标签⾏,到标签⾏后,程序将处理从下⼀⾏开始的命令。
label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表⽰这个字母是标签。
goto命令就是根据这个冒号来寻下⼀步跳到到那⾥。经常与 if 配合使⽤,根据不同的条件来执⾏不同的命令组。
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
goto begin
8,Call语句
Call 命令可以在批处理执⾏过程中调⽤另⼀个批处理,当另⼀个批处理执⾏完后再继续执⾏原来的批处理,类似于java中的⽅法调⽤,还可以传递参数,跟goto语句还是有区别的。
语法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]参数: [Drive:][Path] FileName指定要调⽤的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。调⽤
另⼀个批处理程序,并且不终⽌⽗批处理程序。如果不⽤call⽽直接调⽤别的批处理⽂件,那么执⾏完那个批处理⽂件后将⽆法返回当前⽂件并执⾏当前⽂件的后续命令。 call 命令接受⽤作调⽤⽬标的标签。如果在脚本或批处理⽂件外使⽤ Call,它将不会在命令⾏起作⽤。
call="%cd%\test2.bat" haha kkk aaa    (调⽤指定⽬录下的 test2.bat,且输⼊3个参数给他)
call test2.bat arg1 arg2    (调⽤同⽬录下的 test2.bat,且输⼊2个参数给他)
三、举个栗⼦
下⾯来举个栗⼦,是⼀个循环⾃动登录的功能,从⼀个⽂档中,提取⽤户名、密码,把⽤户名密码⼀次输⼊App的EditText中,最后点击登录。
⾸先,登录界⾯如下:
哇呀呀,帖⼦是从我的csdn拿过来的,不要怀疑⽔印!
然后呢,我们准备了10条数据,别⼈给我的时候是存在excel表⾥的,如下
数据
为了能让脚本⽅便调⽤,我们把它转存为txt⽂件,⽂件名为
数据
好了,前期⼯作准备完毕,现在看下代码怎么写的:
@echo off
title 读取⽂件测试脚本  //设置title
color 3a        //设置命令⾏窗⼝颜⾊
adb shell input keyevent 3          //点了⼀次home键,回到⾸页
adb shell am start stapp      //根据包名启动app
ping -n 11127.1 >nul            //启动app可能需要点时间,我们延时10秒再向下执⾏
setlocal enabledelayedexpansion
set /a num=0            //初始化变量num,⽤来记录循环次数
:
loop
set /a num+=1      //每循环⼀次,加1
echo 第!num!遍    //输出log,第⼏次
for /f  "tokens=1-3" %%i in () do (    //循环读取数据
if %%i==!num! (<span > </span>
if %%i==11 goto end    //当循环次数等于11的时候,退出循环,退出程序,因为我们只有10条数据
call :execute %%j %%k      //调⽤模拟⽤户⾏为的操作 %%j %%k为传到execute⽅法去的参数,分别代表⽤户名、密码
goto loop)
)
:end
echo 结束了
goto eof
:execute
echo username: %1      //打印log,⽤户名
echo password: %2      //打印log,密码
::【登录操作】
::点击⽤户名框
adb shell input tap 2681734
::输⼊⽤户名
adb shell input text %1
::点击密码框
android模拟点击adb shell input tap 654572
:
:输⼊密码
adb shell input text %2
::点击登录button,登录
adb shell input tap 630870

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。