Android手机上,利用bat脚本模拟用户操作2016-02-15 浏览(123) [摘要:人人大概会碰到如许的景象: # 大概您是一个经过App的发卖职员,须要不时靠App的面击率去拿利润 # 大概您是一个小我开辟者,念要本身写个剧本面击banner告白 # 大概您是一] 大家可能会遇到这样的情景: # 也许你是一个通过App的销售人员,需要不断靠App的点击率来拿利润 # 也许你是一个个人开发者,想要自己写个脚本点击banner广告 # 也许你是一个业务经理,你的API是应用内某模块点击率超过X万次 ………… 那么你就可以来看看这篇帖子了。 言归正传 利用bat脚本模拟用户操作,需要用到两点: ①就是adb命令了,adb命令可以用来模拟用户在手机上的操作 ②bat语言,就是批处理语言,主要用来进行逻辑处理,跟众多语言语法一样,批处理语言也包括for循环、if语句之类的语法;
一、adb命令 首先我们来介绍模拟用户在手机上操作的adb命令
input keyevent //发送键盘事件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
用法说明:
adb shell input keyevent “value”
usage: input ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 看看上面的这四个命令是不是已经满足你日常使用了呢?
先列举 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 143 1850 //这是点击了横坐标为143、纵坐标为1850的像素点 adb shell input swipe 200 100 444 666 //这是从坐标点(200,100)滑动到了坐标(444,666) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【快速获取想要点击图标像素点的技巧:】想要点击某个button,但是怎么快速获取该button的像素位置呢? 一般Android在[设置--高级设置--开发者选项]中,或者[设置--开发人员选项]中,有“指针位置”这一项,打开该开关
如上图,方框的位置就是你所点击的区域坐标点,注意,原坐标[0, 0]就是手机屏幕的左上角。 还有一点,如果你在屏幕滑动了一段距离,你想知道滑动距离的坐标数值差,也可以看到:
就是上图中的红色数值,[dX, dY] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二、bat语言,批处理语言 1,基础语法
①.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。 2,如何执行批处理文件 新建一个txt文本文件,写完代码之后,保存为XXX.bat文件,然后双击该文件就行~~~
3,先来几个常用的语法: ①注释:Rem或::
Rem 这是一行注释 :: 这也是一行注释②打印个log啥的:echo命令 语法: echo [{on|off}] [message]
1), ECHO [message] 显示信息,此句可以用来打log,例子如下:
默认是on,on时会显示如下 如果改成off,off时会显示如下
3), ECHO 显示当前回显设置。
echo Windows Registry Editor Version 5.00 > c:\setupreg.reg (此前还没有 setupreg.reg 这个文件) echo "SourcePath"="D:\\Win2003\\" >> c:\setupreg.reg (追加内容进 setupreg.reg 这个文件)③ @命令 表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦) @ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
@echo off (此语句常用于开头,表示不显示所有的命令行信息,包括此句) @echo please wait a minite... @format X: /q/u/autoset ④ title 命令 给cmd窗口设置title
title 读取文件测试脚本设置前: 设置后: ⑤ color命令:设置背景及字体颜色 语法: color bf ⑥ Pause命令: 可以自己试一下,挺有用的功能,会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 ⑦打开某网站
start iexplore.exe http://www.baidu.com start chrome.exe http://www.baidu.com⑧延时执行下一句语句:
ping -n N 127.1 >nul执行该语句,就会延迟执行N-1秒
For语句是比较重要的语法,网上已经有很多人做了各种解释说明,我就不再做重复的轮子了,找了两篇介绍的比较清楚易懂的for语句帖子供大家交流: http://blog.csdn.net/pigchan/article/details/5066098 http://www.jb51.net/article/17908.htm
5,Set语句 同上,set语句的帖子:http://blog.csdn.net/anye3000/article/details/8443738
6,If语句 if 表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:
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 not 1==1 ”的写法) LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于
7,Goto语句 语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
@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]]
call="%cd%\test2.bat" haha kkk aaa (调用指定目录下的 test2.bat,且输入3个参数给他) call test2.bat arg1 arg2 (调用同目录下的 test2.bat,且输入2个参数给他) 请参考如下帖子:http://blog.csdn.net/stpeace/article/details/9041453
三、举个栗子 下面来举个栗子,是一个循环自动登录的功能,从一个文档中,提取用户名、密码,把用户名密码一次输入App的EditText中,最后点击登录。 首先,登录界面如下:
然后呢,我们准备了10条数据,别人给我的时候是存在excel表里的,如下
为了能让脚本方便调用,我们把它转存为txt文件,文件名为data.txt
好了,前期工作准备完毕,现在看下代码怎么写的:
@echo off title 读取文件测试脚本 //设置title color 3a //设置命令行窗口颜色 adb shell input keyevent 3 //点了一次home键,回到首页 adb shell am start com.gaoyang.testapp //根据包名启动app ping -n 11 127.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 (data.txt) do ( //循环读取数据 if %%i==!num! (<span style="white-space:pre"> </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 268 1734 ::输入用户名 adb shell input text %1 ::点击密码框 adb shell input tap 654 572 ::输入密码 adb shell input text %2 ::点击登录button,登录 adb shell input tap 630 870当然了,有登录肯定有退出登录,需要循环操作的话,还得在登录前执行退出登录的操作才行,有上面的离职之后,就比较简单了,自己加上就可以了~~~ 相关推荐 |
|