使用Python控制手机
1.0 一切从一个薅羊毛项目开始说起
假期我有一个andorid设备自动化需求,于是乎就想到了Python。但是Python并没有可以直接操作android的库(或者我没去研究)。于是乎就想到了万能的andorid调试工具adb。
1.1 android和adb的关系
android操作系统是老生常谈的内容了,今天在这里不做过多赘述,接下来开始介绍adb。
adb全称(Android debug bridge),主要用于android程序开发中的debug操作。
1.2 adb安装配置
SYSTEM | URL |
---|---|
WINDOWS | https://dl.google.com/android/repository/platform-tools-latest-windows.zip |
Linux | https://dl.google.com/android/repository/platform-tools-latest-windows.zip |
MAC | https://dl.google.com/android/repository/platform-tools-latest-linux.zip |
直接下载解压即可,再添加到系统变量即可。
打开bash或者cmd,在里面输入:adb --version
有回显即代表配置完成。
- 如果你是在Linux系统,安装方法则更为简单——只需要使用apt软件管理包来安装就可以。
sudo apt install adb
1.3 了解os.system方法和os.popen方法
在Python中,我们可以使用os.system方法和os.popen方法来执行系统命令。当然我可不是说在Python中只有这两种执行命令的方法啊。只是对于我们这个需求来说,这两个命令便已足够。
import os
os.system("ping baidu.com") # 使用os.system()方法来ping百度
- popen方法作为一个扩展阅读,有兴趣的话请自行了解
1.4 adb基础命令熟悉
网上此类教程甚多,我再去写也没什么意义。包括我自己也是边用边查,详细请查阅adb官方文档。
1.5 做Python自动化工作
我们使用面向对象的编程思想,新建一个属于我们自己的对象。
import os
class Adb():
devide = ""
def __init__(self,devide):
self.devide = devide
super().__init__()
def text(self,text):
'''
该方法用于输入特定文本内容
'''
# print ("[+++]adb -s %s shell input text %s" % (self.devide,text))
os.system("adb -s %s shell input text %s" % (self.devide,text))
def tap(self,x,y):
'''
该方法用于点击特定内容
'''
os.system("adb -s %s shell input tap %s %s" % (self.devide,x,y))
def swipe(self,x,y,x1,y1):
'''
该方法用于滑动屏幕
'''
os.system ("adb -s %s shell input swipe %s %s %s %s" % (self.devide,x,y,x1,y1))
def killApp(self,App):
'''
该方法用于关闭App
'''
os.system("adb -s %s shell am force-stop %s" % (self.devide,App))
def startApp(self,App):
'''
该方法用于启动App
'''
os.system("adb -s %s shell am start %s" % (self.devide,App))
def screencap(self,imgName=""):
'''
该方法用于对目前操作的手机截图,欢迎使用。
imgName - 想要输出的图片名字,填写空则输出到当前目录下
'''
os.system("adb -s %s shell /system/bin/screencap -p /sdcard/screenshot.png" % (self.devide))
# sleep(3)
os.system("adb -s %s pull /sdcard/screenshot.png %s" % (self.devide,imgName))
def keyevent(self,keycode):
os.system("adb -s %s shell input keyevent %s" % (self.devide,keycode))
该对象里包含了很多操作设备的方法,比如说我如果想操作127.0.0.1:62001。我只需要把127.0.0.1:62001这个参数传入Adb类中让他实例化成一个对象,就像这样。
if __name__=="__main__":
a = Adb("127.0.0.1:62001")
是不是有点熟悉的味道了?如果我们想要启动app就直接找到相应的方法startApp
,然后实例化的对象a
里传入app的包名。
a.startApp("com.*.*")
就调用完成了。
至此,我们就完成了自动化的准备工作。在哪之后,如果我们编写一个程序需要干一些事情。便可以直接调用方法。