使用Python控制手机

使用Python控制手机

1.0 一切从一个薅羊毛项目开始说起

假期我有一个andorid设备自动化需求,于是乎就想到了Python。但是Python并没有可以直接操作android的库(或者我没去研究)。于是乎就想到了万能的andorid调试工具adb

1.1 android和adb的关系

android操作系统是老生常谈的内容了,今天在这里不做过多赘述,接下来开始介绍adb
adb全称(Android debug bridge),主要用于android程序开发中的debug操作。

1.2 adb安装配置

SYSTEMURL
WINDOWShttps://dl.google.com/android/repository/platform-tools-latest-windows.zip
Linuxhttps://dl.google.com/android/repository/platform-tools-latest-windows.zip
MAChttps://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.*.*")

就调用完成了。

至此,我们就完成了自动化的准备工作。在哪之后,如果我们编写一个程序需要干一些事情。便可以直接调用方法。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值