史上最全的用Python操控手机APP攻略!建议收藏!
最近经常看到用Python操作手机APP的项目,例如抖音、闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境。至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里。
为了使没有安卓开发经验的人也能快速学会用Python操作手机APP,我从Android SDK部署、ADB基础应用、Python操作手机等方面入手写了这篇文章,目的是使大家对ADB的使用有一个直观的认识,这样在玩上面提到的这些项目时会更轻松一些。
事先声明:本文涉及的各类操作可能有多种实现方法,我只会提及其中一种,而且我采取的方法很有可能不是最优的方法。
1
Android SDK下载和部署
说起Android SDK工具,那还真是不少,有SDK Tools、SDK、Platform-tools等等,这里我推荐SDK Tools,进入https://www.androiddevtools.cn/这个网站可以看到下图中的界面,选择自己对应的系统版本(zip版)下载。
将下载后的文件解压缩,运行其中的SDK Manager.exe文件,进入Packages安装管理界面,对于新手朋友们我建议直接使用默认选项,然后点击右下角的 Install XX packages 按钮,整个下载安装过程大概需要几十分钟,具体时间跟个人网速有关。
接着就是配置环境变量了,把android-sdk目录下的platform-tools和tools文件夹添加到系统变量中,这一步属于常规操作,我就不再演示了。
执行完以上步骤,ADB环境就算配置完毕了,之后要做的就是开启手机的开发者选项、开启USB调试、用usb线将手机跟电脑链接。
下面进入关键的一步——通过ADB测试手机是否连接成功。进入系统终端,输入adb devices
指令,如果出现下图中的结果,就说明刚才的环境部署成功了,其中device前面的是连接的设备号。
如果连接测试不成功,例如找不到设备或者设备连接不上,可以依次尝试关闭并再次开始调试、重启手机、重启电脑、插拔USB线等操作,通常都可以解决。
2
ADB的一些基本操作
虽说是基本操作,但ADB的命令也还是挺多的,说多了大家一时也难以消化。所以我这里只列举几个操作手机APP常用的指令,都是一些基本的操作。
1).显示所有包名
adb shell pm list packages
这个指令会罗列出手机已经安装的所有应用包的名称,如果后缀加上参数-s,则会列出所有的系统应用的名称(下图),而加上后缀参数-3则会列出所有第三方应用名称。
2).显示活动程序
adb shell dumpsys activity activities
这个指令能够获取到当前手机系统中正在运行的程序包的名称,例如当我在手机中启动小米手机的“游戏中心”,运行上述指令就会获取到下图中的信息:
图中realActivity
后面的参数就是当前正在运行的Activity名称,稍微留意一下就会发现,这个名称相比上面的包名称要更加详细一些,至于这个名称有什么用,我们马上就会提到。
3).启动应用程序
adb shell am start -n 要启动的应用Activity名称
这里所使用的Activity名称就是刚才获取到的realActivity
后面的参数,使用这个指令时要注意,启动APP一定要使用上一条命令获取到的Activity名称,不能使用adb shell pm list packages
命令获取到的包名称。例如,我们如果要启动小米的游戏中心,可以使用命令:
adb shell am start -n com.xiaomi.gamecenter/.ui.MainTabActivity
而如果使用了下面这条命令是无法顺利启动应用的:
adb shell am start -n com.xiaomi.gamecenter
4).停止应用程序
adb shell am force-stop 要停止的应用名称
这条指令会强制停止指定的应用程序,跟程序的启动略有差别,在停止应用时,使用adb shell pm list packages
命令获取到的包名称就可以了。还是以小米的游戏中心为例,停止应用使用以下指令:
adb shell am force-stop com.xiaomi.gamecenter
5).点击指定位置
adb shell input tap x y
这条指令就很好理解了,模拟点击手机屏幕中的某个位置,(x,y)是对应的位置坐标。在ADB中默认手机屏幕的左上角坐标是(0,0),右下角坐标是(xmax,ymax)。
这里强调一点:使用模拟点击功能必须设置手机允许通过USB调试修改权限或点击模拟
,下文中的滑动手机屏幕、输入文字信息等功能也需要进行同样设置。
6).滑动手机屏幕
adb shell input swipe x_start y_start x_end y_end
这条指令的本质是使得坐标为(x_start, y_start)的点移动到(x_end, y_end)的坐标位置,以此来实现屏幕滑动的效果。
7).输入文字信息
adb shell input text 需要输入的字符
这条指令没什么好说明的,选定对应位置,然后输入对应的字符即可。
8).模拟手机按键
adb shell input keyevent X
现在的大部分手机除了常规键盘字符以外还有一些特殊按键,例如HOME键、音量+/-,以及软键盘中有时会出现的确认键等等,这些按键的模拟就可以通过上面这条指令来实现。
其中X对应的是特殊键的编号,下面举几个常用的例子(其他的特殊键还有很多):
3对应的是HOME键
24对应的是音量+
25对应的是音量-
66对应的是确认键
9).获取元素位置
细心的朋友现在可能会发现,上面提到的一些关于模拟点击、模拟输入的命令,都涉及到手机元素定位的问题,那么我们在实践中如何确定具体的坐标位置和元素信息呢?这里我提议使用uiautomatorviewer.bat这个工具,它会随着SDK Tools一起安装,就在tools目录下。
来看下面这幅图,手机连接成功后,点击左上角的绿色图标就会获取到手机的当前页面信息,然后在屏幕左侧可以点选任意位置或者元素,相关信息会在右侧屏幕中显示。
是不是感觉跟用chrome分析网页非常类似,有了这些信息,再使用上面提到的几款指令操作手机就不是问题了。
3
Python操控手机App
1).命令行操控
前面讲了ADB操控手机的一些基本操作,只有理论未免太枯燥,现在我们做个小试验来看看效果。
我们还是以小米的游戏中心为例,使用ADB依次完成以下任务:
切换到“网游”选项卡,指令:adb shell input tap 400 263
选中搜索栏,指令:adb shell input tap 776 139
输入“wangzherongyao”,指令:adb shell input text wangzherongyao
点击确认键,指令:adb shell input keyevent 66
进入王者荣耀游戏页面,指令:adb shell input tap 600 500
为了录制方便,我把手机屏幕同步到电脑中,来看看试验效果:
(手机同步电脑-视频)
2).Python脚本操控
从上面的演示视频看,使用ADB操作手机APP还算比较成功,但是如果像刚才那样逐条输入指令,可能还不如直接操作手机来的方便,那么我们就需要借助Python脚本使其批量化、自动化运行。
Python执行终端指令可以借助os.system()函数,我们来看下面这段代码:
上面代码所实现的功能跟我们之前演示的基本一样,主要增加了一个打开游戏中心的操作、简化了一些中间步骤,再来看这次的操作过程(下面的视频),是不是比刚才流畅的多了?
(Python演示操作-视频)
小结:
今天的文章讲到的都是ADB的入门级操作,不懂ADB很多跟安卓APP有关的实践都没办法实现,但是仅仅学会这些还不足以实现一个像样的控制脚本,想要学习更牛逼的操作,可以去参考我在文章开头提到的一些项目。
史上最全的用Python操控手机APP攻略!建议收藏!的更多相关文章
- [Git] 写文章 史上最全文献检索、阅读及管理攻略
copy from : https://zhuanlan.zhihu.com/p/30605683 一.查文献 首先,我认为需要常备几个体量大.文献全的数据库,有针对性找哦!下面列出了一些适合所有专 ...
- 史上最全最强Charles截取手机https协议数据包教程(附上利用此技术制作最近微信比较火的头脑王者辅助外挂)!
纯原创,思路也是本人花了半个小时整理出来的,整个完成花费了本人半天时间,由于不才刚大学毕业,所以有的编码方面可能不入大牛们的眼,敬请原谅!如有转载请附上本地址,谢谢! 最近微信朋友圈刚刚被跳一跳血洗, ...
- 你想找的Python资料这里全都有!没有你找不到!史上最全资料合集
你想找的Python资料这里全都有!没有你找不到!史上最全资料合集 2017年11月15日 13:48:53 技术小百科 阅读数:1931 GitHub 上有一个 Awesome - XXX 系列 ...
- 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)
周五,下班了吗?软件测试人. 明天是周末了!给大家推荐一个技术干货好文.史上最全的 jmeter 获取 jdbc 数据使用的四种方法.我也精剪了jmeter的自动化接口测试的视频放在了同名UP主,周末 ...
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
- spring + spring mvc + tomcat 面试题(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
随机推荐
- 【Golang基础】defer执行顺序
defer 执行顺序类似栈的先入后出原则(FILO) 一个defer引发的小坑:打开文件,读取内容,删除文件 // 原始问题代码 func testFun(){ // 打开文件 file, ...
- SA详细注释不压行代码
){ //变量含义:m是字符集大小,n是字符串长度,c是一个桶数组,a[i]是字符串(下标从1开始) //rk[i]就是suffix(i)的字典序排名,sa[i]就是要求的排名为i的后缀的起始位置,即 ...
- java之this关键字和super关键字的区别
编号 区别点 this super 1 访问属性 访问本类中的属性,如果本类没有此 属性则从父类中继续查找 访问父类中的属性 2 调用方法 访问本类中的方法 直接访问父类中的方法 3 调用构造器 调用 ...
- 2019年FJNU低编赛 G题(dfs博弈)
###题目链接### 题目大意: 有一个 0 ~ n+1 的数轴,Alice 站在 0 点处,Bob 站在 n+1 点处.在 1 ~ n 上各有着权值. Alice 每次向右移动 1 格或两格 ,Bo ...
- Python 爬虫从入门到进阶之路(二)
上一篇文章我们对爬虫有了一个初步认识,本篇文章我们开始学习 Python 爬虫实例. 在 Python 中有很多库可以用来抓取网页,其中内置了 urllib 模块,该模块就能实现我们基本的网页爬取. ...
- maven工程指定web资源包,创建jsp文件
进入项目的project structure. 选择web. 在右侧增加web资源包路径
- VS2010到VS2019各个版本的密钥
VS2019专业版和企业版的密钥 Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Profe ...
- Git - Git推送本地分支到远程分支报错(! [rejected] non-fast-forward)的解决办法
一般都是冲突造成的,解决方案执行如下命令(dev为分支名称): git fetch origin dev #获取远程 dev 分支的修改 git merge origin dev #合并 ...
- linux中vi和vim操作
一.简单介绍 vi 和 vim 类似于windows的文本编辑器 所有的Linux系统都会内置vi文本编辑器 vim可以看做是vi增强版,具有程序编辑能力,支持语法高亮,代码补全,编译及错误跳转等功能 ...
- javaWeb核心技术第十三篇之Ajax
Js--ajax--原理解释 概述:异步刷新网页,不会刷新整个页面. Get原理: <%@ page language="java" contentType="te ...