利用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     // Home
input keyevent // Back
input keyevent //Up
input keyevent //Down
input keyevent //Left
input keyevent //Right
input keyevent //Select/Ok
input keyevent //Volume+
input keyevent // Volume-
input keyevent // Menu 菜单~~~

下面来举个栗子:
①你可以先进入到adb shell中,再执行input keyevent "value",如下,看看是不是执行了home键的操作呢:

shell@android:/ $ input keyevent   

②你也可以不进入adb shell中,直接执行(在bat脚本中写的时候当然要用这种啦~),如下:

adb shell input tap   //这是点击了横坐标为143、纵坐标为1850的像素点
adb shell input swipe //这是从坐标点(,)滑动到了坐标(,)

========================================
【快速获取想要点击图标像素点的技巧:】想要点击某个button,但是怎么快速获取该button的像素位置呢?
一般Android在[设置--高级设置--开发者选项]中,或者[设置--开发人员选项]中,有“指针位置”这一项,打开该开关

 
不要怀疑水印,我是从自己博客拿过来的:)

如上图,方框的位置就是你所点击的区域坐标点,注意,原坐标[0, 0]就是手机屏幕的左上角。
还有一点,如果你在屏幕滑动了一段距离,你想知道滑动距离的坐标数值差,也可以看到:

 
就是上图中的红色数值,[dX, dY]

==================================================

二、bat语言,批处理语言

1,基础语法
①.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。
②.批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。
③.批处理的编程能力远不如C语言等编程语言,也十分不规范。
④.每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。
⑤.C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。
⑥.大小写不敏感(命令符忽略大小写)
⑦.批处理的文件扩展名为 .bat 或 .cmd。
⑧.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。

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:\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
b 是指定背景色的十六进制数字; f 指定前景颜色(即字体颜色)。
颜色值: 0:黑色 1:蓝色 2:绿色 3:湖蓝 4:红色 5:紫色 6:黄色 7:白色
8:灰色 9:淡蓝 A:淡绿 B:浅绿 C:淡红 D:淡紫 E:淡黄 F:亮白
如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE启动时的颜色。
如果两参数一样,视为无效输入。只有一个参数时,设置字体。

⑥ 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秒

4,For语句
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
语法:if [not] "参数" == "字符串" 待执行的命令
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)

if "%1" == "a" format a:
if {%} == {} goto noparms

② if exist
语法: if [not] exist [路径\]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。

if exist config.sys edit config.sys   (表示如果存在这文件,则编辑它,用很难看的系统编辑器)
if exist config.sys type config.sys (表示如果存在这文件,则显示它的内容)
  1. if errorlevel number
    语法: if [not] errorlevel <数字> 待执行的命令
    如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列)
@echo off
XCOPY F:\test.bat D:\
IF ERRORLEVEL (ECHO 文件拷贝失败
) Else IF ERRORLEVEL ECHO 成功拷贝文件
pause

很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),称为错误码errorlevel或称返回码。
常见的返回码为0、1。通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令。

④ else
语法:if 条件 (成立时执行的命令) else (不成立时执行的命令)
如果是多个条件,建议适当使用括号把各条件包起来,以免出错。

if  ==  ( echo comment1 ) else if == ( echo comment2 ) else (echo comment3 )
注:如果 else 的语句需要换行,if 执行的行尾需用“^”连接,并且 if 执行的动作需用(括起来),否则报错
if == ( echo comment1 ) else if == ( echo comment2 ) ^
else (echo comment3 )

⑤ 比较运算符:

     EQU - 等于   (一般使用“==”)
NEQ - 不等于 (没有 “!=”,改用“ if not == ”的写法)
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个参数给他)

请参考如下帖子:http://blog.csdn.net/stpeace/article/details/9041453

三、举个栗子

下面来举个栗子,是一个循环自动登录的功能,从一个文档中,提取用户名、密码,把用户名密码一次输入App的EditText中,最后点击登录。

首先,登录界面如下:

 
哇呀呀,帖子是从我的csdn拿过来的,不要怀疑水印!

然后呢,我们准备了10条数据,别人给我的时候是存在excel表里的,如下

 
数据

为了能让脚本方便调用,我们把它转存为txt文件,文件名为data.txt

 
数据

好了,前期工作准备完毕,现在看下代码怎么写的:

@echo off
title 读取文件测试脚本 //设置title
color 3a //设置命令行窗口颜色 adb shell input keyevent //点了一次home键,回到首页
adb shell am start com.gaoyang.testapp //根据包名启动app
ping -n 127.1 >nul //启动app可能需要点时间,我们延时10秒再向下执行 setlocal enabledelayedexpansion
set /a num= //初始化变量num,用来记录循环次数 :loop
set /a num+= //每循环一次,加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== goto end //当循环次数等于11的时候,退出循环,退出程序,因为我们只有10条数据
call :execute %%j %%k //调用模拟用户行为的操作 %%j %%k为传到execute方法去的参数,分别代表用户名、密码
goto loop) ) :end
echo 结束了
goto eof :execute
echo username: % //打印log,用户名
echo password: % //打印log,密码
::【登录操作】
::点击用户名框
adb shell input tap
::输入用户名
adb shell input text %
::点击密码框
adb shell input tap
::输入密码
adb shell input text %
::点击登录button,登录
adb shell input tap

Android手机上,利用bat脚本模拟用户操作的更多相关文章

  1. Android随笔之——用shell脚本模拟用户按键、触摸操作

    之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作.本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容. 本文的模拟功 ...

  2. windows下定时利用bat脚本实现ftp上传和下载

    前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: ...

  3. 利用.bat脚本使得可运行jar开机自动运行

    1.利用Elipse到处可运行的jar包 2.写.bat脚本[点此下载],相应目录自己根据需要修改即可 3.将此脚本放在"启动"文件夹中

  4. 在SoapUI中模拟用户操作

    SoapUI作为一款接口测试工具,具有极大的灵活性和拓展性.它可以通过安装插件,拓展其功能.Selenium作为一款Web自动化测试插件可以很好的与SoapUI进行集成.如果要在SoapUI中模拟用户 ...

  5. jQuery中模拟用户操作

    有时为了节省不想手动操作网页,但又想看到用户操作时的效果,可以用到jQuery提供的trigger方法.见下图代码 在不点击按钮时仍然想弹出this.value 我们只需要在后面加上.trigger( ...

  6. C#对bat脚本文件的操作示例

    实现C#操作bat脚本文件 using System;using System.Collections.Generic;using System.ComponentModel;using System ...

  7. HttpClient 模拟用户操作

    首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ...

  8. 利用Hibernate监听器实现用户操作日志

    网上搜索发现,实现用户操作日志的方式有:自定义注解方式.Hibernate拦截器方式.Hibernate监听器方式等. 1.自定义注解方式较为麻烦,需要进行操作记录的方法均需要添加注解,但是相对的操作 ...

  9. Android手机上Audio DSP频率低 memory小的应对措施

    我在前面的文章(Android智能手机上的音频浅析)中说过Android手机上有一块专门用于音频处理的DSP,它的特点是频率低(一般几百MHZ).内部memory小(通常不超过100k word).要 ...

随机推荐

  1. python使用(四)

    1.file_os_option.py2.file_option.py3.configfile_option.py4.logger_option.py 1.file_os_option.py # co ...

  2. (转)WebSphere的web工程中怎么获取数据源

    原文:http://aguu125.iteye.com/blog/1694313 https://blog.csdn.net/bigtree_3721/article/details/44900325 ...

  3. django2笔记:路由path语法

    django2笔记:路由path语法 9月23,Django 发布了2.0a1版本,这是一个 feature freeze 版本,如果没有什么意外的话,2.0正式版不会再增加新的功能了.按照以往的规律 ...

  4. Shell 相互调用

    Shell 文件包含 和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号( ...

  5. 在Ubuntu Server上安装Postgresql

    首先更新一下源: sudo apt-get update 如果你不知道Postgresql具体的包的名称,可以使用一下语句进行查找: apt-cache search ^Postgresql 使用上述 ...

  6. Quarz.net 设置任务并行和任务串行

    如何设置Quarz.net某个任务完成后再继续执行该任务?  Quarz.net 的任务有并行和串行两种: 并行:一个定时任务,当执行时间到了的时候,立刻执行此任务,不管当前这个任务是否在执行中: 串 ...

  7. 【杂谈】从CGI到Servlet

    访问服务器的静态页面 每个Web服务器都运行着一个HTTP服务软件,用于响应web浏览器的请求,返回客户想要的页面.HTTP服务器都会有一个文件夹用于放置相关的页面文件,默认是  /user/loca ...

  8. How to describe the wind sprial in computer system?

    How to describe the wind sprial in computer system? 2017-02-21 刘崇军 风螺旋线 If we want get the approval ...

  9. 从Spring-Session源码看Session机制的实现细节

    Re:从零开始的Spring Session(一) Re:从零开始的Spring Session(二) Re:从零开始的Spring Session(三) 去年我曾经写过几篇和 Spring Sess ...

  10. CSS设置table下tbody滚动条与thead对齐的方法

    <style>table tbody {display:block;height:195px;overflow-y:scroll;} table thead, tbody tr {disp ...