Python编程控制Android手机操作技巧示例代码

news2024/9/22 17:37:20

文章目录

    • 你应该拥有的东西
    • 截图
      • TemplateMatching
    • 滑动
    • 打电话给某人
    • 手机录屏
    • 打开手机
    • 发送 Whatsapp 消息
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


在这里插入图片描述

几天前我在考虑使用 python 从 whatsapp 发送消息。和你们一样,我开始潜伏在互联网上寻找一些解决方案并找到了关于twilio. 一开始,是一个不错的解决方案,但它不是免费的,我必须购买一个 twilio 电话号码。此外,我无法在互联网上找到任何可用的 whatsapp API。所以我放弃了使用 twilio 和任何其他 whatsapp API 的想法。在想了很多之后,打开 android studio,我连接了我的手机,然后开始了这个过程。当应用程序构建时,我想到了使用手机本身自动发送 whatsapp 消息的想法。我搜索了一些差不多的东西,发现了一些很有可能解决我的问题的东西。我找到了一个命令行工具,adb它可以帮助人们在不接触手机的情况下控制手机。

你应该拥有的东西

  • 对 Python 的基本理解
  • 一些空闲时间阅读此博客

安装


首先,转到此链接并在您的系统中下载 adb。
解压文件夹并将 adb 放入环境变量中。下面是在环境变量中添加 adb 的完整过程,

在这里插入图片描述

在您的手机中启用 USB 调试,并使用 USB 电缆将您的手机与 PC 连接。

通过打开 cmd 并键入,检查连接是否正确adb devices。您将在连接的设备列表中看到一个设备。

如果您可以看到您的设备,那么您可以打开任何代码编辑器。我正在使用 Visual Studio 代码。

开始


让我们首先导入一些我们需要的依赖项。您可以使用pip.

import cv2
import subprocess

我们将需要子进程通过命令行调用 adb 并获取输出,我们需要 cv2 进行一些图像处理,以便 python 能够点击屏幕或任何其他任务。
现在让我们在下面创建一个名为 adb 的基本函数,

def adb(command):
    proc = subprocess.Popen(command.split(' '), stdout=subprocess.PIPE, shell=True)
    (out, \_) = proc.communicate()
    return out.decode('utf-8')

上面的函数基本上是通过子进程调用 adb 并检索我们将需要的输出。

轻敲


现在让我们编写代码,其中 python 将单击移动设备的屏幕。所以我们将创建一个名为 tap 的函数,它会点击屏幕上的特定位置。

def tap(tap\_x, tap\_y):
    adb("adb shell input tap {} {}".format(tap\_x, tap\_y))
tap(100,100)

这将单击距 x 100 像素和距 y 100 像素。现在您一定在想,为每个命令硬编码坐标是非常困难的,并且当设备改变时它不会工作,这就是为什么在本博客的下一节中我们将使用图像处理来检测坐标自动地。

截图

def take\_screenshot(final):
    adb(f"adb exec-out screencap -p > ./images/{final}.png")

代码很简单。我们制作了一个功能,可以保存手机内部图像目录的屏幕截图。在函数中,我们可以传递图像文件的名称。

高级点击


现在,我们将使用目标图像来自动检测坐标,而不是传递坐标。为了更好地理解这一点,让我们举个例子,我有这个屏幕 ,我想打开我们中间的应用程序,然后将使用一个称为. 通过这个过程,我们将截取屏幕截图 > 使用模板匹配计算我们中间图标的坐标 > 点击那里

在这里插入图片描述

TemplateMatching

ef image\_position(small\_image, big\_image):
    img\_rgb = cv2.imread(big\_image)
    img\_gray = cv2.cvtColor(img\_rgb, cv2.COLOR\_BGR2GRAY)
    template = cv2.imread(small\_image, 0)
    height, width = template.shape\[::\]
    res = cv2.matchTemplate(img\_gray, template, cv2.TM\_SQDIFF)
    \_, \_, top\_left, \_ = cv2.minMaxLoc(res)
    bottom\_right = (top\_left\[0\] + width, top\_left\[1\] + height)
    return (top\_left\[0\]+bottom\_right\[0\])//2, (top\_left\[1\]+bottom\_right\[1\])//2

screen="screen"
take\_screenshot(screen)
x, y  = image\_position("images/among\_us\_icon.png", f"images/{screen}")
click(x,y)
# WOWWW Python successfully opened among us app.

有了上面的代码,即使你在手机屏幕上改变了我们游戏的位置,python仍然可以打开游戏。

我们还能做什么?
你可以用 adb 和 python 做更多的事情。让我们谈谈其中的一些。

滑动

def swipe(start\_x, start\_y, end\_x, end\_y, duration\_ms):
    adb("adb shell input swipe {} {} {} {} {}".format(start\_x, start\_y, end\_x, end\_y, duration\_ms))

打电话给某人

def call(number):
    adb(f"adb shell am start -a android.intent.action.CALL -d tel:{number}")
call('+91xxxxxxxxxx') # +\[CODE\]\[NUMBER\]

从手机下载文件到电脑


在这里插入图片描述

def download(path, output\_path):
    adb(f"adb pull {path} {output\_path}")
从手机中删除文件
def remove(path):
    adb(f"adb shell rm {path}") #/sdcard/...

手机录屏

\# name is the video\_file name and time is the seconds you want to record
def screen\_record(name, time):
    adb(f"adb shell screenrecord /sdcard/{name} --time-limit {time}")
    download(f"/sdcard/{name}",f"./mobile/{name}")
    remove(f"/sdcard/{name}")

打开手机

def switch\_phone\_on\_off():
    adb("adb shell input keyevent 26")

还有更多类似 26 的关键事件。如果您想知道,请访问此链接。

打开网址

def open\_url(url):
    adb(f'adb shell am start -a android.intent.action.VIEW -d {url}')
open\_url("https://www.google.co.in/")

发送 Whatsapp 消息

好的,所以我觉得这很酷。在获得了所有这些基本的理解之后,我们已经解决了我的主要问题,即发送没有二维码的 whatsapp 消息,没有像 twilio 这样的付费方法。这有点棘手,但它在我的手机上工作。我希望它也适用于你的。

def send\_whatsapp\_message(phone, message):
    adb(f'adb shell am start -a android.intent.action.VIEW -d "https://api.whatsapp.com/send?phone={phone}"') # Opening whatsapp url
    adb('ping 127.0.0.1 -n 2 > nul') # delay
    adb(f'adb shell input text "{message}"')  # entering message
    adb('adb shell keyevent 22') # Right arrow
    adb('adb shell keyevent 22') # Right arrow
    adb('adb shell input keyevent 22') # Right arrow 
    adb('adb shell input keyevent 22') # Right arrow
    adb('adb shell input keyevent 66') # Enter Key

send\_whatsapp\_message('+91xxxxxxxxxx', 'blah blah blah')

消息已发送!


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

HttpRunner原来还能这么用,大开眼界!!!

hook机制 Httprunner 框架中的 hook 机制相当于unittest框架中的 setup , teardown 函数,用来进行测试用例执行之前的环境初始化以及测试用例执行完毕之后的环境清理操作。 httprunner 中的 hooks 机制可以用在测试用例层级也可以用在测试步骤层级,其关键…

【UE】绘制抛物线并投射物体

效果 步骤 1. 先新建父类为Actor的蓝图,这里命名为“BP_发射物” 打开“BP_发射物”,添加一个球形的静态网格体和一个发射物移动组件 2. 新建一个父类为角色的蓝图,这里命名为“BP_绘制抛物线” 打开“BP_绘制抛物线” 我们希望可以通过控制…

距离向量路由协议——IGRP和EIGRP

IGRP-内部网关路由协议 IGRP(Interior Gateway Routing Protocol,内部网关路由协议)是一种动态距离向量路由协议,它是Cisco公司在20世纪80年代中期设计的,是Cisco专用路由协议。目前在Cisco高版本的IOS已经对IGRP不提…

掌握 Node.js 事件循环,让代码更高效

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

socket 一个完整的不错的示例

从客户端向服务器端发送信息时&#xff0c;在服务器端有打印显示&#xff1b; 检测环境常用&#xff0c;备份一下 0&#xff0c;公共头文件代码 //config.h#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #inc…

Android中的多进程

在Android中也可以像pc一样开启多进程&#xff0c;这在android的编程中通常是比较少见的&#xff0c;以为在一个app基本上都是单进程工作就已经足够了&#xff0c;有一些特殊的场景&#xff0c;我们需要用多进程来做一些额外的工作&#xff0c;比如下载工作等。 在Android的An…

UI上传组件异步上传更改为同步

实现异步方法 JavaScript 异步 实现异步的五种实现方法_js异步-CSDN博客 这两种比较经常用。 因为上传组件是异步上传的通过Async和await配合使用可以上传完照片视频后返回的地址在继续走下去&#xff0c;而不是图片视频地址还未获取时就上传后端了。

leetcode算法之字符串

目录 1.最长公共前缀2.最长回文子串3.二进制求和4.字符串相乘 1.最长公共前缀 最长公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//法一&#xff1a;两两比较string ret strs[0];for(int i1;i<strs.size();i){ret f…

[栈溢出+参数跟踪] [ZJCTF 2019]Login

题目来源 buuctf——[ZJCTF 2019]Login 本题主要考察参数溯源的能力。 参考链接 https://zhuanlan.zhihu.com/p/570607303 题目信息 64位&#xff0c;ubuntu16&#xff0c;开了金丝雀 C风格的代码&#xff0c;并且将admin登录信息写入代码中。 溢出点不在这里&#xff0c;但是…

井盖倾斜怎么办?智能井盖传感器监测方法

井盖倾斜是一个紧迫的问题&#xff0c;如果不及时处理可能会导致道路安全性下降&#xff0c;进而增加车辆和行人发生意外的风险。为应对这一问题现已开发出智能井盖传感器&#xff0c;它可以持续监测井盖的状态&#xff0c;一旦发现倾斜等异常情况会立即发出警报。 在智慧城市的…

揭秘:软件测试中Web请求的完整流程!

在软件开发的过程中&#xff0c;测试是一个至关重要的环节。而在现代互联网应用中&#xff0c;Web请求是很常见的一个测试需求。本文将介绍Web请求的完整测试流程&#xff0c;帮助读者更好地理解软件测试的关键步骤。 一、测试准备阶段 在进行Web请求测试之前&#xff0c;测试…

【C】语言 sizeof和strlen的对比

目录 sizeof和strlen的对比 1.1 sizeof 1.2 strlen strlen的模拟实现 strlen介绍 1.3 sizeof 和 strlen的对比 sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候&#xff0c;我们学习了 sizeof &#xff0c; sizeof 计算变量所占内存内存空间⼤⼩的&#xff0c;…

我试图通过这篇文章告诉你,什么是神奇的泛化调用。

关于 RPC 调用&#xff0c;大家肯定都是比较熟悉的了&#xff0c;就是在微服务架构下解决系统间通信问题的一个玩意。 其中的典型代表之一就是 Dubbo 了&#xff1a; 在微服务架构下&#xff0c;我们针对某个 RPC 接口&#xff0c;我们一般有两个角色。 服务消费者 (Dubbo Con…

【前端首屏加载速度优化(0): 谷歌浏览器时间参数】

DOMContentLoaded 浏览器已经完全加载了 HTML&#xff0c;DOM树构建完成&#xff0c;但是像是 <img> 和样式表等外部资源可能并没有下载完毕。 Load DOM树构建完成后&#xff0c;继续加载 html/css 中的外部资源&#xff0c;加载完成之后&#xff0c;视为页面加载完成。…

继电保护-变压器纵联差动保护MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 原理概述 差动保护是在两端设置的保护&#xff0c;通过比较两端测回来的电气量&#xff0c;进而看是否需要动作&#xff0c;纵联差动保护是变压器主保护。 纵联差动保护基本原则 双绕组变压器实现纵联差动…

java反射和注解2-自定义注解

对反射有一定了解过后学习注解就会轻松许多&#xff0c;这篇文章会创建创建字段&#xff0c;方法&#xff0c;参数上面的注解&#xff0c;并且通过反射的形式将注解内容拿出来。 下面是自定义注解的简短讲解 1&#xff0c;自定义注解&#xff0c;创建一个只能修饰方法的注解 …

【外汇天眼】概率之道:规则交易背后的心态与风险控制

交易的结果&#xff0c;无外乎盈利和亏损。 对于这些结果&#xff0c;我们的心态管理很重要、很重要&#xff01; 这涉及到“保住江山”和“东山再起”。 先来说说交易盈利的结果 当一个人能够稳定盈利的时候&#xff0c;很容易产生自我麻痹、忘乎所以的飘飘然心态&#xff0…

C++基础 -9- 函数的默认参数

函数默认格式(图片代码段呈现) #include "iostream"using namespace std;void rlxy(int a100) {cout << a << endl; }int main() {rlxy();rlxy(99); }函数默认参数注意事项 函数的默认参数从左开始推导 错误写法 正确写法

一篇学会cron表达式

1、定义 Cron表达式是一种用于定义定时任务的格式化字符串。它被广泛用于Unix、Linux和类Unix系统中&#xff0c;用于在指定的时间执行预定的任务。Cron表达式由6个字段组成&#xff0c;每个字段通过空格分隔开。 在本文中&#xff0c;我们将学习如何理解和编写Cron表达式。 C…

高防服务器和高防CDN的区别是什么?

现今大环境下攻击问题愈发严峻&#xff0c;许多网站有遇到被攻击导致网站崩溃&#xff0c;资源消耗的问题&#xff0c;那么这时候高防就是给为站长&#xff0c;企业等的第一选择了&#xff0c;那边目前高防CDN和高防服务器这两种抵御DDoS攻击的两种主流防御&#xff0c;那种会更…