Python利用ADB工具进行手机自动化控制

Written by

in

文章目录
  • 本教程将教你使用 Python 和 ADB 工具实现 PC 控制 Android 手机自动滑动视频的功能。适合零基础开发者,所有步骤可直接跟随操作。
  • 抖音:com.ss.android.ugc.aweme 快手:com.smile.gifmaker B站:tv.danmaku.bili 微信:com.tencent.mm QQ:com.tencent.mobileqq 微博:com.sina.weibo 查找应用包名方法: # 先打开目标应用,然后执行: adb shell dumpsys window | grep mCurrentFocus
  • 如果滑动效果不理想,需要根据手机分辨率调整坐标。 查看手机分辨率: adb shell wm size 根据分辨率调整: 假设分辨率为 1080×2400: # 计算公式: # x坐标 = 屏幕宽度 / 2 = 1080 / 2 = 540 # y1坐标(起点)= 屏幕高度 * 0.8 = 2400 * 0.8 = 1920 # y2坐标(终点)= 屏幕高度 * 0.2 = 2400 * 0.2 = 480 # 修改 swipe_up 函数中的命令为: device.shell(“input swipe 540 1920 540 480 300”)
  • phone-automation/├── test_connection.py      # 测试连接脚本├── basic_swipe.py          # 基础滑动脚本├── auto_swipe.py           # 完整功能脚本└── swipe_log.txt           # 日志文件(运行后生成)
  • 恭喜你完成教程!现在你已经掌握: Python + ADB 环境搭建 手机连接和授权 基础自动化脚本编写 完整功能脚本开发 参数化配置和异常处理 下一步建议: 学习更多 ADB 命令(点击、长按、输入文本等) 探索 uiautomator2 进行元素定位 研究图像识别技术实现更智能的自动化 以上就是Python利用 ADB工具进行手机自动化控制的详细内容,更多关于Python ADB手机自动化控制的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python使用Appium实现自动化操作手机入门教学 Python实现自动化接收与处理手机验证码 Python自动化处理手机验证码 Python自动化办公之手机号提取 Python与Appium实现手机APP自动化测试的示例代码 python利用appium实现手机APP自动化的示例
  • 目录
    • 教程简介
    • 一、环境准备
      • 1.1 系统要求
      • 1.2 安装 Python
      • 1.3 安装 ADB 工具
      • 1.4 手机设置
    • 二、安装 Python 依赖
      • 2.1 安装 pure-python-adb
      • 2.2 验证安装
    • 三、编写自动化脚本
      • 3.1 创建项目目录
      • 3.2 测试连接脚本
      • 3.3 基础滑动脚本
      • 3.4 完整功能脚本
    • 四、运行指南
      • 4.1 基础运行
      • 4.2 自定义参数运行
      • 4.3 查看帮助
      • 4.4 停止脚本
    • 五、常见应用包名
      • 六、调整滑动坐标
        • 七、故障排查
          • 7.1 “未检测到设备”
          • 7.2 “ModuleNotFoundError: No module named ‘ppadb’”
          • 7.3 滑动无反应
          • 7.4 脚本运行卡住
        • 八、进阶功能
          • 8.1 添加随机间隔
          • 8.2 添加日志文件
          • 8.3 多设备控制
        • 九、完整项目结构
          • 十、总结

            本教程将教你使用 Python 和 ADB 工具实现 PC 控制 Android 手机自动滑动视频的功能。适合零基础开发者,所有步骤可直接跟随操作。

            • Windows 10/11、macOS 或 Linux
            • Android 手机(需开启开发者模式)
            • USB 数据线

            检查是否已安装:

            python --version
            

            如果显示版本号(如 Python 3.x.x),则已安装,跳到 1.3。

            Windows 安装:

            • 访问 https://www.python.org/downloads/
            • 下载 Python 3.8 或更高版本
            • 安装时勾选 “Add Python to PATH”
            • 打开命令提示符(cmd),输入 python --version 验证

            macOS 安装:

            # 使用 Homebrew
            brew install python3
            

            Linux 安装:

            # Ubuntu/Debian
            sudo apt update
            sudo apt install python3 python3-pip
            
            # CentOS/RHEL
            sudo yum install python3 python3-pip
            

            方法一:安装完整 Android SDK Platform-Tools(推荐)

            • 访问 https://developer.android.com/tools/releases/platform-tools
            • 下载对应系统版本
            • 解压到任意目录(如 C:platform-tools
            • 添加到系统环境变量 PATH

            Windows 添加环境变量:

            • 右键"此电脑" → “属性” → “高级系统设置”
            • “环境变量” → 找到 Path → “编辑” → “新建”
            • 添加 ADB 工具路径(如 C:platform-tools

            macOS/Linux 添加环境变量:

            # 编辑 ~/.bashrc 或 ~/.zshrc
            echo 'export PATH=$PATH:/path/to/platform-tools' >> ~/.zshrc
            source ~/.zshrc
            

            验证安装:

            adb version
            

            应显示类似:Android Debug Bridge version 1.0.41

            开启开发者模式:

            • 设置 → 关于手机
            • 连续点击"版本号"7次
            • 返回设置 → 系统 → 开发者选项
            • 开启"USB调试"
            • 用 USB 线连接手机到电脑
            • 手机上弹出授权提示,点击"允许"

            验证连接:

            adb devices
            

            应显示类似:

            List of devices attached
            ABC123456789    device
            

            如果显示 unauthorized,检查手机授权提示。

            打开终端/命令提示符,执行:

            pip install pure-python-adb
            

            可能遇到的问题:

            如果提示 pip: command not found

            # 尝试使用 pip3
            pip3 install pure-python-adb
            
            # 或者使用 python -m pip
            python -m pip install pure-python-adb
            

            如果安装速度慢,使用国内镜像:

            pip install pure-python-adb -i https://pypi.tuna.tsinghua.edu.cn/simple
            

            python -c "from ppadb.client import Client; print('安装成功')"
            

            如果没有报错且显示"安装成功",则安装完成。

            # 创建项目文件夹
            mkdir phone-automation
            cd phone-automation
            

            创建 test_connection.py

            """
            测试手机连接脚本
            功能:验证 ADB 连接是否正常
            """
            
            from ppadb.client import Client
            
            def test_connection():
                try:
                    # 连接 ADB 服务器
                    adb = Client(host="127.0.0.1", port=5037)
                    
                    # 获取设备列表
                    devices = adb.devices()
                    
                    if len(devices) == 0:
                        print("❌ 未检测到设备")
                        print("请检查:")
                        print("1. 手机是否通过 USB 连接")
                        print("2. 是否开启 USB 调试")
                        print("3. 是否授权此电脑")
                        return False
                    
                    print(f"✅ 检测到 {len(devices)} 个设备")
                    for device in devices:
                        print(f"设备序列号: {device.serial}")
                    
                    return True
                    
                except Exception as e:
                    print(f"❌ 连接失败: {e}")
                    print("请确保 ADB 服务已启动,执行: adb start-server")
                    return False
            
            if __name__ == "__main__":
                test_connection()
            

            运行测试:

            python test_connection.py
            

            创建 basic_swipe.py

            """
            基础滑动脚本
            功能:每隔指定时间执行一次向上滑动
            """
            
            from ppadb.client import Client
            import time
            
            def swipe_up(device):
                """
                执行向上滑动操作
                
                参数说明:
                input swipe x1 y1 x2 y2 duration
                x1, y1: 起始坐标
                x2, y2: 结束坐标
                duration: 滑动持续时间(毫秒)
                
                常见分辨率的滑动坐标:
                - 1080x2400: swipe 500 1800 500 600 300
                - 1080x1920: swipe 500 1500 500 500 300
                - 720x1280: swipe 360 1000 360 400 300
                """
                # 这里使用通用坐标,适配大多数手机
                # 从屏幕下方(80%)滑到上方(20%)
                device.shell("input swipe 500 1500 500 500 300")
                print("✅ 执行滑动操作")
            
            def main():
                try:
                    # 连接设备
                    adb = Client(host="127.0.0.1", port=5037)
                    devices = adb.devices()
                    
                    if len(devices) == 0:
                        print("❌ 未检测到设备,请先连接手机")
                        return
                    
                    # 使用第一个设备
                    device = devices[0]
                    print(f"📱 已连接设备: {device.serial}")
                    
                    # 配置参数
                    interval = 5  # 滑动间隔(秒)
                    count = 0     # 滑动计数
                    
                    print(f"⏰ 每 {interval} 秒滑动一次")
                    print("按 Ctrl+C 停止n")
                    
                    # 持续滑动
                    while True:
                        count += 1
                        print(f"[{count}] {time.strftime('%H:%M:%S')} ", end="")
                        swipe_up(device)
                        time.sleep(interval)
                        
                except KeyboardInterrupt:
                    print(f"nn⏹️  已停止,共执行 {count} 次滑动")
                except Exception as e:
                    print(f"n❌ 发生错误: {e}")
            
            if __name__ == "__main__":
                main()
            

            运行脚本:

            python basic_swipe.py
            

            创建 auto_swipe.py

            """
            完整自动化滑动脚本
            功能:
            1. 支持自定义滑动间隔和次数
            2. 支持指定应用包名(可选启动应用)
            3. 记录滑动日志
            4. 异常处理和重连机制
            """
            
            from ppadb.client import Client
            import time
            import argparse
            from datetime import datetime
            
            class PhoneAutomation:
                def __init__(self, interval=5, total_count=None, app_package=None):
                    """
                    初始化自动化控制器
                    
                    参数:
                    interval: 滑动间隔(秒)
                    total_count: 总滑动次数(None=无限次)
                    app_package: 应用包名(可选)
                    """
                    self.interval = interval
                    self.total_count = total_count
                    self.app_package = app_package
                    self.device = None
                    self.count = 0
                    
                def connect_device(self):
                    """连接设备"""
                    try:
                        adb = Client(host="127.0.0.1", port=5037)
                        devices = adb.devices()
                        
                        if len(devices) == 0:
                            print("❌ 未检测到设备")
                            return False
                        
                        self.device = devices[0]
                        print(f"✅ 已连接设备: {self.device.serial}")
                        return True
                        
                    except Exception as e:
                        print(f"❌ 连接失败: {e}")
                        return False
                
                def start_app(self):
                    """启动指定应用(如果配置了包名)"""
                    if not self.app_package:
                        return
                    
                    try:
                        # 启动应用
                        self.device.shell(f"monkey -p {self.app_package} -c android.intent.category.LAUNCHER 1")
                        print(f"📱 已启动应用: {self.app_package}")
                        time.sleep(2)  # 等待应用启动
                    except Exception as e:
                        print(f"⚠️  启动应用失败: {e}")
                
                def swipe_up(self):
                    """执行向上滑动"""
                    try:
                        self.device.shell("input swipe 500 1500 500 500 300")
                        self.count += 1
                        current_time = datetime.now().strftime('%H:%M:%S')
                        print(f"[{self.count}] {current_time} ✅ 滑动成功")
                        return True
                    except Exception as e:
                        print(f"❌ 滑动失败: {e}")
                        return False
                
                def should_continue(self):
                    """判断是否继续执行"""
                    if self.total_count is None:
                        return True
                    return self.count < self.total_count
                
                def run(self):
                    """运行自动化任务"""
                    if not self.connect_device():
                        return
                    
                    self.start_app()
                    
                    print(f"n⏰ 滑动间隔: {self.interval} 秒")
                    if self.total_count:
                        print(f"🎯 目标次数: {self.total_count} 次")
                    else:
                        print(f"🔄 持续运行(按 Ctrl+C 停止)")
                    print("-" * 50)
                    
                    try:
                        while self.should_continue():
                            if not self.swipe_up():
                                # 滑动失败,尝试重连
                                print("🔄 尝试重新连接...")
                                if not self.connect_device():
                                    break
                            
                            if self.should_continue():
                                time.sleep(self.interval)
                                
                    except KeyboardInterrupt:
                        print("nn⏹️  用户停止")
                    finally:
                        print(f"n📊 统计信息:")
                        print(f"   - 总滑动次数: {self.count}")
                        print(f"   - 运行时间: {self.count * self.interval} 秒")
            
            def main():
                # 命令行参数解析
                parser = argparse.ArgumentParser(description='手机自动化滑动脚本')
                parser.add_argument('-i', '--interval', type=int, default=5, 
                                   help='滑动间隔(秒),默认5秒')
                parser.add_argument('-n', '--count', type=int, default=None,
                                   help='滑动次数,不指定则无限循环')
                parser.add_argument('-p', '--package', type=str, default=None,
                                   help='应用包名,如:com.ss.android.ugc.aweme(抖音)')
                
                args = parser.parse_args()
                
                # 创建并运行自动化任务
                automation = PhoneAutomation(
                    interval=args.interval,
                    total_count=args.count,
                    app_package=args.package
                )
                automation.run()
            
            if __name__ == "__main__":
                main()
            

            默认配置运行(5秒间隔,无限循环):

            python auto_swipe.py
            

            设置间隔为10秒:

            python auto_swipe.py -i 10
            

            设置滑动20次后自动停止:

            python auto_swipe.py -n 20
            

            启动抖音并自动滑动:

            python auto_swipe.py -p com.ss.android.ugc.aweme
            

            组合参数(每8秒滑动一次,共50次,启动抖音):

            python auto_swipe.py -i 8 -n 50 -p com.ss.android.ugc.aweme
            

            python auto_swipe.py -h
            

            运行中按 Ctrl + C 即可停止。

            • 抖音:com.ss.android.ugc.aweme
            • 快手:com.smile.gifmaker
            • B站:tv.danmaku.bili
            • 微信:com.tencent.mm
            • QQ:com.tencent.mobileqq
            • 微博:com.sina.weibo

            查找应用包名方法:

            # 先打开目标应用,然后执行:
            adb shell dumpsys window | grep mCurrentFocus
            

            如果滑动效果不理想,需要根据手机分辨率调整坐标。

            查看手机分辨率:

            adb shell wm size
            

            根据分辨率调整:

            假设分辨率为 1080×2400:

            # 计算公式:
            # x坐标 = 屏幕宽度 / 2 = 1080 / 2 = 540
            # y1坐标(起点)= 屏幕高度 * 0.8 = 2400 * 0.8 = 1920
            # y2坐标(终点)= 屏幕高度 * 0.2 = 2400 * 0.2 = 480
            
            # 修改 swipe_up 函数中的命令为:
            device.shell("input swipe 540 1920 540 480 300")
            

            解决方案:

            # 1. 检查设备连接
            adb devices
            
            # 2. 重启 ADB 服务
            adb kill-server
            adb start-server
            
            # 3. 检查驱动(Windows)
            # 在设备管理器中查看是否有黄色感叹号
            
            # 4. 重新授权
            # 拔掉 USB 线重新插入,手机上重新授权
            

            解决方案:

            # 确认 Python 环境
            python --version
            
            # 重新安装
            pip uninstall pure-python-adb
            pip install pure-python-adb
            

            解决方案:

            • 确认应用已在前台运行
            • 调整滑动坐标(参考第六节)
            • 增加滑动时间:300 改为 500
            • 检查手机是否锁屏

            解决方案:

            # 检查 ADB 进程
            ps aux | grep adb
            
            # 杀掉所有 ADB 进程
            killall adb
            
            # 重启 ADB
            adb start-server
            

            让滑动更像人类操作:

            import random
            
            # 在 auto_swipe.py 的 run 方法中修改:
            time.sleep(self.interval + random.uniform(-1, 1))
            

            import logging
            
            # 在脚本开头添加:
            logging.basicConfig(
                filename='swipe_log.txt',
                level=logging.INFO,
                format='%(asctime)s - %(message)s'
            )
            
            # 在 swipe_up 方法中添加:
            logging.info(f"滑动第 {self.count} 次")
            

            # 修改 connect_device 方法,支持选择设备:
            devices = adb.devices()
            for i, device in enumerate(devices):
                print(f"{i}: {device.serial}")
            choice = int(input("选择设备序号: "))
            self.device = devices[choice]
            

            phone-automation/
            ├── test_connection.py      # 测试连接脚本
            ├── basic_swipe.py          # 基础滑动脚本
            ├── auto_swipe.py           # 完整功能脚本
            └── swipe_log.txt           # 日志文件(运行后生成)

            恭喜你完成教程!现在你已经掌握:

            • Python + ADB 环境搭建
            • 手机连接和授权
            • 基础自动化脚本编写
            • 完整功能脚本开发
            • 参数化配置和异常处理

            下一步建议:

            • 学习更多 ADB 命令(点击、长按、输入文本等)
            • 探索 uiautomator2 进行元素定位
            • 研究图像识别技术实现更智能的自动化

            以上就是Python利用 ADB工具进行手机自动化控制的详细内容,更多关于Python ADB手机自动化控制的资料请关注风君子博客其它相关文章!

            您可能感兴趣的文章:

            • Python使用Appium实现自动化操作手机入门教学
            • Python实现自动化接收与处理手机验证码
            • Python自动化处理手机验证码
            • Python自动化办公之手机号提取
            • Python与Appium实现手机APP自动化测试的示例代码
            • python利用appium实现手机APP自动化的示例

            站内搜索