使用adb+PyQt5制作一个手机自动化的小工具

本文介绍了一款使用adb和PyQt5创建的手机自动化工具,该工具可以显示手机屏幕并模拟点击、滑动等操作。通过录制和回放动作,实现了手机签到、浏览等功能的自动化。详细内容包括自定义ImageLabel类、动作管理、文件存取以及动作执行。项目源码已上传至GitHub。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

这是一个从今年双十一时候产生的一个想法,好多平台上都有很多羊毛可以薅,每天签到啊什么的,然后每天去点就很烦,希望做一个自动化的小工具去让程序去自动完成各种签到,浏览什么的。

正好赶上崴脚下不了地,只能宅在宿舍,而且最难的最优化也考完了,就利用这段时间把这个想法实现了一下。

程序应包含如下几个功能

  1. 有一个窗口专门用来显示手机的屏幕,在这个窗口上的点击和滑动应该能映射到手机的点击和滑动。并且由于手机屏幕的分辨率太高了,这里还有一个缩放映射的问题。
  2. 各种手机的操作可以录成一个动作组,基本的动作包含:点击,滑动,延时,返回键,home键。录制的动作组应以一定格式存储在文件中,并方便编辑
  3. 针对不同的任务,记录不同的动作文件,动作文件导入后应可以批量执行

程序上传到了:https://github.com/buaalzm/auto_mobile
博客连接:https://blog.csdn.net/qq_33833073/article/details/103553273

项目概述

主要功能应有如下几个

  1. 屏幕显示
  2. 动作录制与存储
  3. 动作加载与执行

其中,用电脑操作手机使用adb工具,GUI设计使用PyQt5,动作文件的存储使用json格式


使用说明

界面是长这个样子的~
在这里插入图片描述

  • 点击测试连接,在命令行中会输出devices信息,有设备号则表示连上了
  • 点击获取屏幕,获得一张手机的截图并显示在窗口中
  • 返回桌面和返回上一级按钮映射到手机对应的操作
  • 在显示手机屏幕的地方上面点击或滑动,会映射到手机对应的操作,并获取一张新的截图
  • 点击开始录制按钮之后,弹出对话框输入要保存的文件名(不需要加扩展名),在电脑端对手机的操作会被记录下来,点击停止录制,记录的动作保存到…/mobile_action目录中,以json文件存储
    在这里插入图片描述
  • 添加和删除按钮是对动作文件进行操作,编辑要执行的动作组,待执行的动作会显示到下方的TreeWidget中
  • 点击开始执行,即执行TreeWidget中显示的动作组

详细设计

提升一个类用于图像显示

设计一个ImageLabel类专门用于图像显示,以及鼠标事件的拦截

提升类的操作

新建一个ImageLabel.py文件,在里面编写ImageLabel类,继承QLabel
初始化时传递一个图片的路径,通过showImage函数显示图片

from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QLabel


class ImageLabel(QLabel):
    showImageSignal = pyqtSignal()

    def __init__(self, parent=None):
        super(ImageLabel, self
Python使用PyQt5创建一个ADB调试小工具,涉及到UI设计、多线程处理以及与ADB(Android Debug Bridge)API的交互。以下是一个简单的框架,展示了如何开始这个项目: 首先,确保已安装所需的库: ```bash pip install pyqt5 pip install adbpython ``` 然后,你可以从创建UI开始,使用`QtWidgets`模块: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLabel, QPushButton class ADBTool(QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): layout = QVBoxLayout() self.setWindowTitle("ADB调试工具") # 创建按钮并添加功能 btn_connect = QPushButton('连接设备') btn_connect.clicked.connect(self.connect_device) layout.addWidget(btn_connect) btn_rat_mode = QPushButton('进入RAT模式') btn_rat_mode.clicked.connect(self.enter_rat_mode) layout.addWidget(btn_rat_mode) # ... 添加更多功能按钮和对应的函数... central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) if __name__ == "__main__": app = QApplication(sys.argv) tool = ADBTool() tool.show() sys.exit(app.exec_()) ``` 接下来,你需要为每个按钮的功能实现单独的槽函数(slot),例如: ```python def connect_device(self): from adbutils import AdbDevice device = AdbDevice.discover(timeout=10) # 检查是否有设备连接 if device: print(f"成功连接到设备 {device.name}") else: print("未找到连接的设备") def enter_rat_mode(self): # 使用adbshell命令进入RAT模式,这里需要根据实际操作来编写,因为这通常涉及权限管理和复杂操作 pass # 例如: # device.shell("su && pm grant com.example.app android.permission.SETSCREENLOCKTIMEOUT") # device.shell("am start -W com.example.app/.RATActivity") # 添加其他功能函数如投屏、WiFi SAR等,并在对应的槽函数中执行相应的ADB命令。 ```` 请注意,上述代码仅提供了一个基础结构,实际的ADB操作可能需要根据Android系统的特性和安全策略进行调整。同时,由于涉及到敏感操作,如RAT(远程访问工具),你需要确保遵守所有相关的法律和隐私政策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值