Python 操控手机 APP

 

From:https://www.cnblogs.com/7758520lzy/p/11994776.html

Python 控制雷电模拟器:https://blog.csdn.net/zerglurker/article/details/102931511

python 控制手机

python控制雷电模拟器

 

经常看到用 Python 操作手机 APP 的项目,例如抖音、闲鱼之类的,看完后发现这些项目无一例外需要部署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 目录里,有一些文件夹:

  • tools:该目录下存放大量Android开发工具,例如 SDK Manager、androidavd、emulator、ddms等等。( 针对pc平台下使用的工具:比如模拟器,.9patch工具,性能追踪可视化工具traceview, )
  • platform-tools:存放Android不同平台的相关工具;随着SDK更新版本,这里的工具会有相应更新变化,但是一般都是向后兼容。最常用的是Android Debug Bridge(adb)工具。( 针对pc端和移动端进行交互的一些工具:比如adb工具(通过该工具pc端获取移动端log信息),sqlite3工具(通过该工具查询移动端数据库信息) )
  • add-ons:该目录下存放额外的附加软件,刚解压时为空;
  • platform:该目录下存放不同版本的Android;
  • docs:Android SDK文档;
  • samples:不同版本下的代码示例。(根据需要下载)
  • build-tools:aapt工具,aidl工具   
  • aapt 编译资源文件得到二进制 xml 和 R.Java
  • aidl 工具 将 aidl 文件   ---   Java interface
  • javac:  R.java + java interface + application source code + thrid jar   --->   class.dex 文件 
  • apkbuilder: class.dex + binary resouce + other resouce   --->   xx.apk

 

接着就是配置环境变量了,把 android-sdk 目录下的 platform-tools 和 tools 文件夹添加到系统变量中,这一步属于常规操作,我就不再演示了。

执行完以上步骤,ADB 环境就算配置完毕了,之后要做的就是开启手机的开发者选项、开启 USB调试、用 usb 线将手机跟电脑链接。

下面进入关键的一步 —— 通过 ADB 测试手机是否连接成功。进入系统终端,输入 adb devices 指令,如果出现下图中的结果,就说明刚才的环境部署成功了,其中device前面的是连接的设备号。

如果连接测试不成功,例如找不到设备或者设备连接不上,可以依次尝试关闭并再次开始调试、重启手机、重启电脑、插拔USB线等操作,通常都可以解决。

 

 

2. ADB的一些基本操作

 

虽说是基本操作,但 ADB 的命令也还是挺多的,说多了大家一时也难以消化。所以我这里只列举几个操作手机APP常用的指令,都是一些基本的操作。( 更多 adb 命令:https://github.com/mzlogin/awesome-adb

 

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()函数,我们来看下面这段代码:

示例代码:

import os
os.system('adb shell input tap 100 100');

也可以使用 subprocess.Popen,最简单使用方式如下,设置 shell=True,就不会弹出cmd框

process = subprocess.Popen('adb shell input tap 14 1402',shell=True)

程序实例: 

# coding:utf-8
# 程序功能:可以实现抖音个人页面视频的自动点击,从而自动增加访问量
# 思路:抖音主页中两个视频切换点击,可以实现访问量的增加
# 使用ADB程序,视频的屏幕坐标可以使用 adb shell uiautomator dump命令,获取该页面xml源码后查得
# 下述是小米MIX2抖音主页第一个视频和第二个视频的坐标位置
# 缺点:运行时不能移动屏幕,后续可以采用获取模块ID号的方式去点击相应的位置
import time
import subprocessi = 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 += 1print(str(i) + 'clicks have been completed')

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Log4Net 全方位跟踪程序运行

前端日子自己写了一个简单的日志跟踪程序,现在目前正在做的一个项目中使用以便于跟踪程序异常和运行状况,但是被否认了!可能是没有权威性,于是自己总结了一下Log4net日志跟踪系统,这里分享大家学习一下。当然写这个文章…

面对5G,华为、中兴及三大运营商怎么布局?

来源:亿欧摘要:面对即将到来的新机遇——5G,各大相关通信厂商纷纷大力布局,尤其以华为和中兴为主的通信设备商和三大运营商移动、联通和电信。面对5G,看其如何布局?什么是5G?5G是第五代移动通信…

业务架构·应用架构·数据架构实战~业务驱动的应用架构设计

1、什么是应用架构 应用架构是一组应用系统及其交互关系的描述,其中的每个应用系统都是一个“逻辑功能组”,用于支撑业务功能、管理数据资产。 支撑业务架构中,具体业务功能、业务流程的要求。 支撑数据架构中,具体数据资产的操…

Android 之 四大组件、六大布局、五大存储

Android 之四大组件、六大布局、五大存储:https://blog.csdn.net/shenggaofei/article/details/52450668 Android 四大组件、五大存储、六大布局:https://blog.csdn.net/xiankog/article/details/81702119 Android四大基本组件介绍与生命周期&#xff…

vb光环褪去java、c/c++/c#成编程主流

evansdata公司最近的一份调查显示, 运用微软的visualbasic软件停止开发的技术人员人数有明显的下降。 但微软方面则不认同这一说法。 广告:d_textevansdata公司位于美国圣克鲁斯, 他们在北美对超过430位开发人员停止了调查, 从而对…

互联网大脑进化简史,类脑智能巨系统产生与兴起

前言2018年以来,在短短的6个月里,包括360安全大脑、阿里ET大脑、华为城市神经网络、腾讯超级大脑、浪潮企业大脑、上海城市大脑、滴滴交通大脑、AIbee行业大脑不断涌现。在大数据,人工智能之后,类脑智能巨系统正在成为科技新的热点…

业务架构·应用架构·数据架构实战~业务驱动的数据架构设计

1.什么是数据架构(DA) 定义一:数据架构是通过对齐企业战略得到的数据资产管理蓝图。具体而言,该蓝图用于指导如何分析数据需求、如何做好相应设计。 定义二:数据架构描述企业的 A、主要数据类型及其来源&#xff1b…

10款交互设计原型开发工具(转)

所谓“工欲善其事,必先利其器”,尽管小米加步枪可以也可以打败敌人,但如果朱棣有了坦克装甲部队,那岂不是更容易平定安南? 关于原型开发工具,各有各的使用习惯,有人喜欢axure、photoshop&#x…

安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告

From:https://www.bilibili.com/video/BV1UE411A7rW?p7 Android 中 adb shell dumpsys 相关命令:https://blog.csdn.net/fengyulinde/article/details/78798055 adb shell dumpsys 命令是用于打印出当前系统信息 (更切确的说是dumpsys命令,…

Nature:科学家成功解读大脑构建的分子机制

来源:生物谷摘要:日前,一项刊登在国际杂志Nature上的研究报告中,来自伦敦大学国王学院的研究人员通过研究发现了大脑构建的基本过程,这或许能帮助理解诸如自闭症和癫痫症等神经发育障碍背后的分子机制。日前&#xff0…

谈判底层逻辑~谈判中的难点梳理

谈判三大困境:抗拒、僵持、僵局 1.抗拒--总防备 eg.买电影票不买两边有人的,和邻居不打招呼 产生防备的原因: 陌生/不熟悉 太多/太复杂 生意上就是,抗拒,不要靠近.... 怎么破冰? Ta不愿见面&#xff…

(原创)浅谈BUG资产,用例资产的作用

注意了,这里提的是如何写BUG和CASE,不是讨论如何去发现BUG或是如何去设计用例 比如同样的BUG或是需求,有些人写的BUG和用例,既简单明了,又一目了然 对于一个公司来说,以前的项目的BUG不能扔一边不管了…

安卓逆向_4 --- Java 学习

菜鸟教程 ----- Java 教程:https://www.runoob.com/java/java-tutorial.html 廖雪峰 ----- Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744 W3Cschool ----- Java 教程:https://www.w3cschool.cn/java/java-tutorial.html …

安卓逆向_5 --- Android 学习

Android 之 四大组件、六大布局、五大存储:https://blog.csdn.net/freeking101/article/details/105377197 安卓(Android)动态创建多个按钮并添加监听事件:https://www.jb51.net/article/88036.htm 安卓按钮添加监听的三种方法&am…

华为公布车联网进展:年内将覆盖10万网联车

来源:车云摘要:实际上,华为进军汽车业的“野心”在于,提供车联网的相关解决方案。近年来,华为一直有向其他领域扩充的计划与布局,此前,其将与汽车厂商合作造车的传闻也一直不绝于耳。对此&#…

NDoc 用户指南

NDoc 用户指南 http://www.uml.org.cn/net/200702271.asp#811转载于:https://www.cnblogs.com/stalwart/archive/2011/05/31/2065177.html

杨强:人工智能在企业的落地是一门大学问

来源:图灵人工智能摘要:人工智能到现在已经 60 多年,几起几落,它的兴衰也是围绕着 “AI是不是可以落地” 进行的。杨强香港科技大学计算机和工程学系主任国际人工智能联合会IJCAI理事长第四范式首席科学家杨强:一个AI&…

淘宝灵活的圆角框--通过一个圆形图片形成圆角原理

具体实现方案就是通过隐藏/显示一个圆形的不同部分来实现圆角效果&#xff0c;具体分析见注释&#xff01;&#xff01; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&…

安卓逆向_6 --- Dalvik 字节码、Smali 详解

CTF Wiki smali&#xff1a;https://ctf-wiki.org/android/basic_operating_mechanism/java_layer/smali/smali/ 深入理解 Dalvik 字节码指令及 Smali 文件&#xff1a;https://blog.csdn.net/dd864140130/article/details/52076515 安卓逆向入门教程&#xff08;二&#xff09…

Optional源码级详解

认识Optional Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用&#xff0c;通常会用 null!obj 这样的方式存在的判断&#xff0c;从而令人头疼导致空指针异常&#xff0c;同Optional的存在可以让代码更加简单&#xff0c;可读性跟高&#xff0c;代码写起来更高效…