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键的操作呢:

[email protected]:/ $ 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命令。可以使用任何文本文件编辑工具创建和修改。
②.批处理是一种简单的程序,可以用 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 {%1} == {} 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 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是参数,指定所要转向的批处理程序中的行。)
指定跳转到标签行,找到标签行后,程序将处理从下一行开始的命令。
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 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

原文地址:https://www.cnblogs.com/wutaotaosin/p/9812929.html

时间: 2024-10-13 07:04:21

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

有关如何修复Android手机上的SSL连接错误的快速指南

"您的连接不是私人的",对于这个问题相信不少朋友在Android设备上都出现过,其实这个问题是Android设备最常见的问题之一,这可能会让您感到困惑,因为它甚至出现在最新的操作系统和最新的设备上,但这不是什么大问题,但是还是让我们来看看如何修复Android手机上的SSL连接错误吧. 让我们从SSL/TLS证书开始吧 首先是一点背景知识.正如你可能知道的,SSL证书旨在对你即将进行访问的网站进行身份验证——过去这是由证书机构进行的,证书机构能够签发证书,确保你知道谁在你的连接的另一端

[python]利用selenium模拟用户操作抓取天猫评论数据

准备: python3.5 安装selenium包 第一种方法: cmd里输pip install selenium,但是经常报错 第二种方法: 下载安装包-cmd进入解压路径-python setup.py install-报错permission denied-右键安全更改报错文件夹权限为完全控制-再次安装成功unknown error: unable to discover open pages-下载chromedriver放在环境变量目录下测试自动打开百度时提示"您使用的是不受支持的命令

jQuery中模拟用户操作

有时为了节省不想手动操作网页,但又想看到用户操作时的效果,可以用到jQuery提供的trigger方法.见下图代码 在不点击按钮时仍然想弹出this.value 我们只需要在后面加上.trigger("事件名称")就可以在不点击按钮的情形下看到用户点击按钮时看到的效果.这种方法的简写方法是用.事件名称()代替trigger("事件名称"),这种简写方法只适用于系统时间. 另外一种模拟方法是.triggerHandler(),这种方法是基于.trigger()的,只是

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

网上搜索发现,实现用户操作日志的方式有:自定义注解方式.Hibernate拦截器方式.Hibernate监听器方式等. 1.自定义注解方式较为麻烦,需要进行操作记录的方法均需要添加注解,但是相对的操作描述更为针对性,缺点是无法获得所操作的实体ID以及成员: 2.拦截器方式经我自己试验,拦截器是在Hibernate操作数据库之前执行的,所以同样获取不了所操作的实体ID和成员,但是相对注解方式来说,不用在原有代码上更改添加注解等,耦合性比较低. 使用拦截器需要保证数据库操作均是对实体类的操作,即使用

Android手机上chrome进行远程调试的步骤

1 手机先开启USB调试功能 2 用USB线连接Android设备,在PC或MAC上的chrome地址栏输入 chrome://inspect 3 勾选界面中的 Discover USB devices ,直到搜索到你的Android设备 4 在移动设备上弹出的是否允许远程调试上,选择“允许” 5 在下面的页面列表(将展示已在Android上的chrome中打开的页面),点击对应的 inspect 开始调试 参考: https://github.com/jieyou/remote_inspect

python爬虫入门(五)Selenium模拟用户操作

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库. 这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(xxx.xxx.xxx.xxx)这个用户,并且 user-agent 还是 Python-urllib/2.7 ,基于这两点判断非人类后直接在服务器上封杀

Bat脚本处理ftp超强案例解说

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://369369.blog.51cto.com/319630/842341 Bat脚本处理ftp超强案例解说 前言:    公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一定做得完,所以就必须研究个全自动更新方案来,于是就 想到了FTP,做个主FTP站,在几百台客户机上启动BAT脚本,每30秒检测一次,如果主站有更新程序,就自动下载更新,

[转]Bat脚本处理ftp超强案例解说

Bat脚本处理ftp超强案例解说 转自:http://369369.blog.51cto.com/319630/842341   前言:   公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一定做得完,所以就必须研究个全自动更新方案来,于是就想到了FTP,做个主FTP站,在几百台客户机上启动BAT脚本,每30秒检测一次,如果主站有更新程序,就自动下载更新,几分钟内,上400台windows服务器,都可以全自动更新程序完毕,相当实用,现把当初研究BAT的

Mysql 记录用户操作

Mysql 连接通过init_connect来初始化,官网说明: 服务器为每个连接的客户端执行的字符串.该字符串由一个或多个SQL语句组成,用分号字符分隔. 例如,默认情况下每个客户端会话都启用自动提交模式.对于较旧的服务器(在MySQL 5.5.8之前), 没有全局自动提交系统变量来指定默认情况下应禁用自动提交,但作为解决方法,init_connect可用于实现相同的效果: SET GLOBAL init_connect ='SET autocommit = 0'; 1.创建数据库及表 创建数