- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python脚本利用adb进行手机控制的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一. adb 相关命令:
1. 关闭adb服务:adb kill-server 2. 启动adb服务 adb start-server 3. 查询当前运行的所有设备 adb devices 4. 可能在adb中存在多个虚拟设备运行 可以指定虚拟设备运行 -s 虚拟设备名称 5. 重启设备 adb reboot --指定虚拟设备 adb -s 设备名称 reboot 6. 查看日志 adb logcat 清除日志 adb logcat -c 7. 进入linux shell下 adb shell 其中常用的linux命令 cd cat 等等 输入su可以获取超级管理员名称了 要确定是否有哪些命令 进入 system/bin目录 就知道了 8. 传入文件到设备中 adb push 本地文件 远程目录 。
9. 从设备中拷贝文件到本地 adb -s emulator-5556 pull /data/config.ini d:/ 。
10. 显示当前运行的全部模拟器: adb devices 。
1 安装应用程序: adb install -r 123.apk 。
12. 获取模拟器中的文件: adb pull <remote> <local> 。
13. 向模拟器中写文件: adb push <local> <remote> 。
14. 进入模拟器的shell模式: adb shell 。
15. 卸载apk包: adb shell cd data/app rm 123.apk exit adb uninstall 123.apk adb install -r 123.apk 。
16. 查看adb命令帮助信息: adb help 17. 删除系统应用: adb remount (重新挂载系统分区,使系统分区重新可写)。 adb shell cd system/app rm 123.apk 。
18. 获取管理员权限: adb root 。
19、复制文件: 复制一个文件或目录到设备: adb push <source> <destination></destination></source> 如:adb push update.zip /sdcard/ 从设备上复制一个文件或目录: adb pull <source> <destination></destination></source> 如:adb pull /sdcard/update.zip. 。
20、取得当前运行设备的实例的列表及每个实例的状态: adb devices 。
21:adb shell input tap 这条命令模拟Android手机在屏幕坐标(X,Y)处进行了点击操作.
22:adb shell input swipe 。
这条命令模拟Android手机从屏幕坐标(X1,Y1)滑动到坐标(X2,Y2)的操作.
23、uiautomator dump dump: creates an XML dump of current UI hierarchy 这个命令是用来成成当前界面的UI层次,并用XML格式进行展示 。这样就可以获取各个组件的位置了 。
注:如果PC要想同时控制多台Android手机,必须在adb 后面添加-s 。
例如:adb -s 13b6e4c4 shell input tap 400 400 。
表示对13b6e4c4这台Android手机进行在屏幕上(400,400)坐标位置进行模拟的点击事件.
24. 能看到设备信息就代表设备已经连接成功了,接下来的命令就是adb install 路径+包名.apk 。
例如我的安装包放在桌面,那么命令就是adb install C:\Users\hyh\Desktop\XXX.apk 。
*** adb shell uiautomator dump /mnt/sdcard/window_dump.xml 获得手机当前界面的UI信息,生成window_dump.xml *** adb shell input text “123” 输入text 。
举例:
1、打开cmd,进入到当前文件夹中,输入命令 adb devices 查看当前与电脑连接的设备(前提是,手机打开usb调试模式),可以查看已连接成功的手机.
2、 若手机成功连接,输入命令 adb shell input tap 100 100 , 表示点击屏幕上坐标为(100,100)的点,如果不知道需要点击的点的具体位置的话可以在手机开发者模式中设置.
二. adb 模拟按键:
1. 比如使用 adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:
。
keycode | 含义 |
---|---|
3 | HOME 键 |
4 | 返回键 |
5 | 打开拨号应用 |
6 | 挂断电话 |
24 | 增加音量 |
25 | 降低音量 |
26 | 电源键 |
27 | 拍照(需要在相机应用里) |
64 | 打开浏览器 |
82 | 菜单键 |
85 | 播放/暂停 |
86 | 停止播放 |
87 | 播放下一首 |
88 | 播放上一首 |
122 | 移动光标到行首或列表顶部 |
123 | 移动光标到行末或列表底部 |
126 | 恢复播放 |
127 | 暂停播放 |
164 | 静音 |
176 | 打开系统设置 |
187 | 切换应用 |
207 | 打开联系人 |
208 | 打开日历 |
209 | 打开音乐 |
210 | 打开计算器 |
220 | 降低屏幕亮度 |
221 | 提高屏幕亮度 |
223 | 系统休眠 |
224 | 点亮屏幕 |
231 | 打开语音助手 |
276 | 如果没有 wakelock 则让系统休眠 |
。
2. input 命令的一些用法举例 。
电源键 。
命令:
1
|
adb shell
input
keyevent
26
|
执行效果相当于按电源键.
菜单键 。
命令:
1
|
adb shell input keyevent 82
|
HOME 键 命令:
1
|
adb shell input keyevent 3
|
返回键 命令:
1
|
adb shell input keyevent 4
|
音量控制 增加音量:
1
|
adb shell input keyevent 24
|
降低音量:
1
|
adb shell input keyevent 25
|
静音:
1
|
adb shell input keyevent 164
|
媒体控制 。
播放/暂停:
1
|
adb shell input keyevent 85
|
停止播放:
1
|
adb shell input keyevent 86
|
播放下一首:
1
|
adb shell input keyevent 87
|
播放上一首:
1
|
adb shell input keyevent 88
|
恢复播放:
1
|
adb shell input keyevent 126
|
暂停播放:
1
|
adb shell input keyevent 127
|
点亮/熄灭屏幕 。
可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕,但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法.
点亮屏幕:
1
|
adb shell input keyevent 224
|
熄灭屏幕:
1
|
adb shell input keyevent 223
|
3、使用python脚本自动运行cmd 命令 。
在adb文件夹下建立一个python文件 。
1
2
|
import
os
os.system(
'adb shell input tap 100 100'
);
|
运行脚本,发现与在命令行输入相同语句有同样的效果.
2、也可以使用subprocess.Popen,最简单使用方式如下,设置shell=True,就不会弹出cmd框 。
1
|
process
=
subprocess.Popen(
'adb shell input tap 14 1402'
,shell
=
True
)
|
程序实例: 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#coding:utf-8
#程序功能:可以实现抖音个人页面视频的自动点击,从而自动增加访问量
#思路:抖音主页中两个视频切换点击,可以实现访问量的增加
#使用ADB程序,视频的屏幕坐标可以使用adb shell uiautomator dump命令,获取该页面xml源码后查得
#下述是小米MIX2抖音主页第一个视频和第二个视频的坐标位置
#缺点:运行时不能移动屏幕,后续可以采用获取模块ID号的方式去点击相应的位置
import
time
import
subprocess
i
=
0
#每次操作的间隔时间取决于手机配置,配置越高时间越短
sleep_time
=
0.5
while
1
:
#用popen设置shell=True不会弹出cmd框
process
=
subprocess.Popen(
'adb shell input tap 14 1402'
,shell
=
True
)
time.sleep(sleep_time)
process
=
subprocess.Popen(
'adb shell input keyevent KEYCODE_BACK'
, shell
=
True
)
time.sleep(sleep_time)
process
=
subprocess.Popen(
'adb shell input tap 375 1402'
, shell
=
True
)
time.sleep(sleep_time)
process
=
subprocess.Popen(
'adb shell input keyevent KEYCODE_BACK'
, shell
=
True
)
time.sleep(sleep_time)
#os.system('adb shell input tap 14 1402')
#os.system('adb shell input keyevent KEYCODE_BACK')
#os.system('adb shell input tap 375 1402')
i
+
=
1
print
str
(i)
+
'clicks have been completed'
|
实现原理 。
Hierarchy Viewer:获得当前手机实时的UI信息,方便用于手机的自动化测试; 。
python中的subprocess.Popen() 或 Python os模块:调用系统命令; 。
uiautomator工具:获取界面控件信息; 。
adb命令:对手机进行操作; 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/moying-wq/p/10001248.html 。
最后此篇关于Python脚本利用adb进行手机控制的方法的文章就讲到这里了,如果你想了解更多关于Python脚本利用adb进行手机控制的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在后台开启了“URL Rewrite”,看起来一切正常,可是点击某一栏目的时候却怎么都进不去,显示的依然是论坛的首页。看了一下论坛目录下,原来这下面并没有自己的.htaccess文件,所以默认使用的
本文实例为大家分享了.net发送邮件的实现代码,供大家参考,具体内容如下 关键代码: 需要引用命名空间: using System.Net.Mail; using System.Net;
今天的一个小测试是老师让用.NET用控件来制作一个拉菜单要求如下: 将鼠标移到父菜单上弹出3个子菜单,而且每个子菜单都有超链接。 以下是我自己做的代码: 复制代
我有以下内容 static const unsigned int chromosome = 6; double bestFitness[chromosomes]; for(int i = 0; i
关于附图,我需要一个计算算法来将 A 轴向下移动 n 英寸,将 B 轴从左向右移动 m 英寸,以便组件圆 D 遵循抛物线的曲线;圆 D 并不总是 10 英寸,可以更小。我不是数学专业的,所以这对我来说
我正在尝试利用我的格式字符串错误,它存在于这个程序中: #include #include #include #include #include void foo(char* tmp, ch
用Matplotlib和Seaborn这类Python库可以画出很好看的图,但是这些图只是静态的,难以动态且美观地呈现数值变化。要是在你下次的演示、视频、社交媒体Po文里能用短视频呈现数据变化,是不
1、进程介绍 进程:正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。 程序:没有执行的代码,是一个静态的。 2、线程
1、前言 在开发过程中,有时会遇到需要控制任务并发执行数量的需求。 例如一个爬虫程序,可以通过限制其并发任务数量来降低请求频率,从而避免由于请求过于频繁被封禁问题的发生。 接下来
Opera 管理着一个漏洞赏金计划,研究人员可以在该计划中报告 Opera 软件中的漏洞并获得奖励。 这篇文章就是我发现的一个漏洞——网页可能会从用户那里检索本地文件的屏幕截图。 考虑到 O
C++ 文件查找 在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfi
1、前言 本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器。 2、关键技术 本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,
最近在将一些项目的rest api迁移到.net core中,最开始是用的Nginx做反向代理,将已经完成切换的部分切入系统,如下图所示: 由于迁移过程中也在进行代码重构,需要经常比较频繁的测
前言 最近学习了python,感觉挺多地方能用到它的。打包 测试 上传 爬电影....而且代码量是真少。人生苦短,我用python。而今天写的这个是因为下载电影时总会发现除了视频还会有这两个文件,
1、Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序
一直想写一套生成静态页面的文章系统 但面对生成静态后的一些复杂数据库交互问题。又望而却步! 于是就想 有没有 在不耽误数据交互的情况下,而又能降低服务器负
Qt 利用大量第 3 方库进行图像编码、压缩、加密、音频和视频编解码器支持等。 从历史上看,当我想使用它们时,我总是必须将它们作为附加依赖项包含在内。我一直想知道是否有一种方法可以简单地重用 Qt 已
我想知道是否可以使用属性将功能“混合”到类/方法/属性中。 就像是: [TrackChanges] public Foo { get; set; } 如果可能的话,有谁会如何实现? 最佳答
有些站点位于共享主机(Windows 2003 Server)上,因此我无法访问服务器配置。 我到处都读到关于杠杆浏览器缓存的信息,特别是静态文件(jpg,css,js等)的信息,但是...在我的情况
我想在我的项目中使用 Julia 的主要原因之一是它的速度,尤其是在计算积分方面。 我想在某个区间 [a,b] 上积分一维函数 f(x)。一般来说,Julia 的 quadgk 函数将是一个快速而准确
我是一名优秀的程序员,十分优秀!