教你用python控制安卓手机


Posted in Python onMay 13, 2021

一、介绍

ADB(Android调试桥)是一个命令行工具(CLI),可用于控制Android设备并与之通信。您可以执行许多操作,例如安装应用程序,调试应用程序,查找隐藏的功能并使用外壳程序直接与设备连接。要启用ADB,您的设备必须首先解锁开发者选项并启用USB调试。要解锁开发人员选项,您可以转到设备设置,然后向下滚动到“关于”部分,找到设备上当前软件的内部版本号。单击内部版本号 7次,将启用开发人员选项。然后,您可以转到设置中的“开发人员选项”面板,然后从那里启用USB调试。现在,您唯一需要做的另一件事就是将设备连接到计算机的USB电缆。

这是今天的旅程:

1.安装要求

2.入门

3.编写脚本的基础

4.创建自拍计时器创

5.建定义搜索器

二、安装要求

我们需要安装的两件事中的第一件事是计算机上的ADB工具。它会自动与Android Studio捆绑在一起,因此,如果您已经拥有了,那就不用担心了。否则,您可以转到[官方文档](https://developer.android.com/studio/command-line/adb),并且在页面顶部应有有关如何安装它的说明。

安装ADB工具后,您需要获取python库,我们将使用该库与ADB和我们的设备进行接口。您可以使用pip install pure-python-adb安装pure-python-adb库。

可选:为使我们在开发脚本时更轻松,我们可以安装一个名为scrcpy的开源程序,该程序允许我们使用鼠标和键盘在我们的计算机上显示和控制我们的android设备。要安装它,您可以转到[Github repo](https://github.com/Genymobile/scrcpy)并下载适用于您的操作系统(Windows,macOS或Linux)的正确版本。如果您使用的是Windows,则将zip文件解压缩到一个目录中,然后将此目录添加到您的路径中。这样一来,我们只需在终端窗口中键入scrcpy即可从系统上的任何位置访问该程序。

三、入门

现在已经安装了所有依赖项,我们可以启动ADB并连接设备。首先,使用USB电缆将设备连接到PC,如果启用了USB调试,则会弹出一条消息,询问PC是否可以控制设备,只需回答是。然后在您的PC上,打开一个终端窗口,并通过键入adb start-server来启动ADB服务器。这应该打印出以下消息:

  • daemon not running; starting now at tcp:5037
  • daemon started successfully

如果您还安装了scrcpy,则可以通过在终端中键入**scrcpy来启动它。但是,这仅在将其添加到路径时才有效,否则可以通过将终端目录更改为安装scrcpy的目录并键入scrcpy.exe**来打开可执行文件。希望一切顺利,您应该能够在PC上看到您的设备,并能够使用鼠标和键盘对其进行控制。

现在,我们可以创建一个新的python文件,并检查是否可以使用该库找到连接的设备:

rom ppadb.client import Client as AdbClient

if __name__ == '__main__':
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

在这里,我们导入AdbClient类并使用它创建一个客户端对象。然后,我们可以获得连接的设备的列表。最后,我们从列表中获得第一台设备(如果仅连接了一个设备,则通常是唯一的设备)。

四、编写脚本的基础

我们要与设备连接的主要方式是使用外壳,通过这种方式,我们可以发送命令以模拟特定位置的触摸或从A滑动到B。要模拟屏幕触摸(轻击),我们首先需要工作了解屏幕坐标的工作方式。为了帮助解决这些问题,我们可以在开发人员选项中激活指针位置设置。激活后,无论您在屏幕上的何处触摸,都可以看到该点的坐标显示在顶部。坐标系的工作方式如下:

教你用python控制安卓手机

该图显示了坐标系的工作方式

显示屏的左上角分别具有* x y 坐标(0,0),并且右下角的坐标是 x y *的最大可能值。

现在我们知道了坐标系的工作原理,我们需要检查一下可以运行的不同命令。我在下面列出了命令列表以及如何使用它们,以供快速参考:

Input tap x y
Input text “hello world!”
Input keyevent eventID
Here is a list of some common eventID's:
3: home button
4: back button
5: call
6: end call
24: volume up
25: volume down
26: turn device on or off
27: open camera
64: open browser
66: enter
67: backspace
207: contacts
220: brightness down
221: brightness up
277: cut
278: copy
279: paste

如果您想找到更多,请在这里找到一长串清单。https://forum.xda-developers.com/t/q-adb-input-keyevent-for-long-press-on-power- button.2063741 / post-64890206。

五、创建自拍计时器

现在我们知道我们能做什么,让我们开始吧。在第一个示例中,我将向您展示如何创建一个快速的自拍计时器。首先,我们需要导入我们的库并创建一个connect函数以连接到我们的设备:

import time

from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

    return device, client

您可以看到connect函数与前面的如何连接到设备的示例相同,除了这里我们返回设备和客户端对象以供以后使用。

if __name__ == '__main__':
    device, client = connect()

    # open up camera app
    device.shell('input keyevent 27')

    # wait 5 seconds
    time.sleep(5)

    # take a photo with volume up
    device.shell('input keyevent 24')
    print('Taken a photo!')

在我们的主代码中,我们可以调用connect函数来检索设备和客户端对象。从那里我们可以打开相机应用程序,等待5秒钟并拍照。真的就是这么简单!正如我之前说过的,这只是复制您通常会做的事情,因此,如果您首先手动进行操作并写下步骤,则思考如何做事情是最好的。

六、创建定义搜索器

现在,我们可以做一些更复杂的事情,那就是要求浏览器找到特定单词的定义,并截图以将其保存在我们的计算机上。

该程序的基本流程如下:

1.打开浏览器

2.单击搜索栏

3.输入搜索查询

4.等待几秒钟

5.截图并保存

但是,在我们开始之前,您需要在默认浏览器中找到搜索栏的坐标,您可以使用我之前建议的方法轻松地找到它们。对我来说,他们是(440,200)。

首先,我们将必须导入与以前相同的库,并且我们还将具有相同的connect方法。

import time

from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

    return device, client

在我们的主要函数中,我们可以调用connect函数,并为我们的搜索栏的* x y *坐标分配一个变量。注意这是一个字符串,而不是列表或元组,这样我们可以轻松地将坐标合并到我们的shell命令中。我们还可以从用户那里获取输入信息,以查看他们想要获取哪个单词的定义:

if __name__ == '__main__':
    device, client = connect()

    search_bar = '440 200' # x y

    query = input('What word do you want to find the definition of: ')
    search_query = f'what is the definition of {query}'

我们会将查询添加到完整的句子中,然后对其进行搜索,这样我们就可以始终获取定义。之后,我们可以打开浏览器,然后将搜索查询输入到搜索栏中,如下所示:

device.shell('input keyevent 64')

time.sleep(0.25) # wait for browser to load

device.shell(f'input tap {search_bar}')

device.shell(f'input text "{search_query}"') # make sure you have the quotation marks around your text
device.shell('input keyevent 66')

time.sleep(3) # wait for results to load

在这里,我们使用eventID 66模拟输入键的按下以执行搜索。如果需要,可以根据需要更改等待时间。

最后,我们将在设备对象上使用screencap方法获取屏幕截图,然后可以将其另存为* .png *文件:

screenshot = device.screencap()

with open('result.png', 'wb') as f: # save the screenshot as result.png
    f.write(screenshot)
    print('Saved screenshot!')

在这里,我们必须以写字节模式打开文件,因为screencap方法返回表示图像的字节。

如果一切都按计划进行,则应该有一个快速脚本来搜索特定单词。这在我的手机上正常工作:

教你用python控制安卓手机

七、最后的想法

希望您今天学到了一些新知识,在我对此进行研究之前,我个人甚至都不知道这是一回事。很酷的事情是,您可以执行平常可以做的任何事情,而且还可以做更多的事,因为它只是模拟您自己的触摸和动作!

希望您喜欢这篇文章,并感谢您的阅读! ?

到此这篇关于教你用python控制安卓手机的文章就介绍到这了,更多相关用python控制手机内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
Python数据分析入门之数据读取与存储
May 13 #Python
python执行js代码的方法
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 #Python
Python数据分析入门之教你怎么搭建环境
Pytorch 统计模型参数量的操作 param.numel()
May 13 #Python
Python机器学习算法之决策树算法的实现与优缺点
Python爬虫基础之爬虫的分类知识总结
You might like
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
Python之list对应元素求和的方法
2018/06/28 Python
python操作excel的方法
2018/08/16 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
浅析python内置模块collections
2019/11/15 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
员工工作表扬信范文
2014/01/13 职场文书
小学生家长评语集锦
2014/01/30 职场文书
中国入世承诺
2014/04/01 职场文书
个人批评与自我批评
2014/10/15 职场文书
违章停车检讨书
2014/10/21 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
机械生产实习心得体会
2016/01/22 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android