《Python实战进阶》No24: PyAutoGUI 实现桌面自动化
No24: PyAutoGUI 实现桌面自动化
摘要
PyAutoGUI 是一个跨平台的桌面自动化工具,能够模拟鼠标点击、键盘输入、屏幕截图与图像识别,适用于重复性桌面任务(如表单填写、游戏操作、批量文件处理)。本集通过代码+截图+输出日志的实战形式,带你掌握从基础操作到复杂任务的全流程自动化。

核心概念与代码实战
1. 基础操作:鼠标与键盘控制
安装命令:
pip install pyautogui
鼠标控制:
import pyautogui
import time # 移动鼠标到坐标 (500, 300)
pyautogui.moveTo(500, 300, duration=1) # 模拟点击(左键单击)
pyautogui.click() # 滚轮滚动(向上滚动 200 单位)
pyautogui.scroll(200)
键盘输入:
# 输入文本
pyautogui.write("Hello, PyAutoGUI!", interval=0.1) # 组合键操作(Ctrl+C)
pyautogui.hotkey("ctrl", "c")
效果验证:
print(f"当前鼠标位置:{pyautogui.position()}") # 输出实时坐标
2. 截屏与图像识别
场景:通过屏幕上的图标定位并点击按钮。
# 截取屏幕并保存
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png") # 查找图标位置(需提前保存图标图片)
button_location = pyautogui.locateOnScreen("submit_button.png")
if button_location: # 计算图标中心点并点击 button_center = pyautogui.center(button_location) pyautogui.click(button_center)
else: print("图标未找到!")
输出示例:
图标位置:Box(left=200, top=150, width=50, height=30)
3. 脚本调试与异常处理
问题场景:图像识别失败导致脚本崩溃。
解决方案:
try: # 设置超时时间为 5 秒 button_location = pyautogui.locateOnScreen( "save_icon.png", confidence=0.8, # 允许 80% 相似度 grayscale=True # 灰度匹配提升速度 ) if not button_location: raise Exception("图标匹配失败!")
except Exception as e: print(f"错误:{e}") # 回退到手动输入坐标 pyautogui.click(100, 200)
调试技巧:
- 使用
pyautogui.PAUSE = 1控制操作间隔 - 启用
pyautogui.FAILSAFE = True(鼠标移至左上角强制停止脚本)
实战案例
案例 1:自动化填写表单
场景:批量填写 Excel 表格中的数据到某个桌面应用。
import pyautogui
import pandas as pd # 读取 Excel 数据
data = pd.read_excel("data.xlsx") for index, row in data.iterrows(): # 定位输入框并填写 pyautogui.click(300, 400) # 姓名输入框 pyautogui.write(row["姓名"]) pyautogui.press("tab") # 跳转到年龄输入框 pyautogui.write(str(row["年龄"])) # 提交表单 pyautogui.press("enter") time.sleep(1) # 等待页面刷新
输出示例:
已提交姓名:张三,年龄:25
已提交姓名:李四,年龄:30
案例 2:模拟游戏中的简单操作
场景:自动玩“键盘反应速度”游戏。
# 监听屏幕特定区域的变化
game_region = (400, 200, 200, 100) while True: # 截取游戏区域 region_screenshot = pyautogui.screenshot(region=game_region) # 检测红色方块出现 if pyautogui.pixelMatchesColor(500, 250, (255, 0, 0)): pyautogui.press("space") # 按空格键得分
案例 3:批量重命名文件
场景:将文件夹中的 100 张图片按规则重命名。
import os
import pyautogui # 打开文件资源管理器
os.system("explorer.exe .\\images")
time.sleep(2) # 依次重命名文件
for i in range(1, 101): pyautogui.hotkey("ctrl", "a") # 全选文件 pyautogui.press("f2") # 重命名 pyautogui.write(f"photo_{i:03d}") # 格式化名称(photo_001) pyautogui.press("enter") time.sleep(0.5)
扩展思考
1. PyAutoGUI 与其他工具的结合
- 与 Selenium 结合:
# 用 Selenium 处理网页,PyAutoGUI 处理下载弹窗 driver.get("https://example.com/download") pyautogui.press("enter") # 自动确认下载对话框 - 打包为可执行文件:
pip install pyinstaller pyinstaller --onefile your_script.py
2. 安全性和法律合规性
- 风险提示:
- 避免自动化操作金融交易、社交账号等敏感场景
- 部分软件(如游戏)可能禁止自动化脚本
- 合规建议:
- 仅用于个人效率提升或授权场景
- 遵守《计算机软件保护条例》和平台规则
总结
通过本实战,你已掌握:
- PyAutoGUI 的核心操作(鼠标、键盘、图像识别)
- 复杂任务的异常处理与调试技巧
- 从表单填写到游戏模拟的完整案例
- 自动化脚本的法律边界与安全实践
下集预告:
《No25: Python 并发编程:从多线程到异步 IO》将带你突破单线程性能瓶颈,实现高并发任务处理!
附:运行环境
- 环境要求:Python 3.7+、Windows/macOS/Linux
相关文章:
《Python实战进阶》No24: PyAutoGUI 实现桌面自动化
No24: PyAutoGUI 实现桌面自动化 摘要 PyAutoGUI 是一个跨平台的桌面自动化工具,能够模拟鼠标点击、键盘输入、屏幕截图与图像识别,适用于重复性桌面任务(如表单填写、游戏操作、批量文件处理)。本集通过代码截图输出日志的实战形…...
功耗电流和耗电量的获取
1. 实验室环境: 在受控的实验条件下,我们使用 PowerMonitor 精确控制变量(如固定设备型号和系统版本、清理后台应用、设置恒定的亮度与音量、确保稳定的网络连接等),以获取高精度的电流测量数据,从而准确评…...
医疗送药机器人“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
一、引言 1.1 研究背景与意义 在医疗体系中,高效精准的药品配送是保障医疗服务质量和患者安全的关键环节。随着医疗技术的不断进步和医疗需求的日益增长,传统的人工送药方式逐渐暴露出诸多弊端,如配送效率低下、易受人为因素干扰导致错误率上升、人力成本高昂等。特别是在…...
C++【类和对象】(结束篇)
C类和对象 1.static成员2.友元3.内部类4.匿名对象5.对象拷贝时的编译器优化 1.static成员 用static修饰的成员变量叫做静态成员变量,静态成员一定要在类外进行初始化。静态成员变量为所有类的共享,放入静态区,不属于某个具体对象,…...
[CISCN 2022 初赛]ezpop(没成功复现)
打开在线环境可以看到: 记得之前做过一个类似的就是有点像照着漏洞去复现。应该可以直接在网上找到链子去打。 www.zip查看路由是 Index/test,然后 post 传参 a: exp(参考了别的大神的wp): <?php //…...
QT编程之QGIS
一、QGIS介绍 Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下&am…...
福特售后再添亮点,为烈马模块化车身改装提供专业支持
2024年5月17日,中国上海 2024 年北京国际车展期间,纯血敞篷越野车国产福特烈马正式上市并公布全系厂商指导价,价格区间为29.98万元至43.88万元。作为一台风格鲜明,个性突出的纯血硬核越野车,诞生于1966年的福特烈马&a…...
嵌入式C语言中堆栈管理与数据存储的精髓
在嵌入式开发中,理解C语言的内存管理和数据存储机制是至关重要的。本文将从堆栈管理和数据存储两个方面,深入探讨C语言在嵌入式Linux开发中的应用。 一、堆栈管理 1.1 栈的初始化与作用 栈是C语言运行的基础,主要用于存储函数参数、局部变量、函数返回值和编译器生成的临时…...
003_快乐数
链接:202. 快乐数 - 力扣(LeetCode) 202.快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为…...
【MySQL数据库】约束
在MySQL数据库中,约束(Constraint)是用于限制表中数据的一种规则,目的是为了确保数据的完整性以及一致性。下面我们就从建表时的约束、建表后如何添加约束等几个方面,讲解MySQL中常用的几种约束。 创建时约束 分类 非空约束 非空…...
SANS 网络安全 网络安全三件套
基本设置篇 一、在线安全的四个误解 Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在…...
LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析
Hi,大家好,我是半亩花海。本实验基于汽车销量时序数据,使用LSTM网络(长短期记忆网络)构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程,验证LSTM在短期时序预测中的有效性。 目录 一、实验…...
[Windows] 轻量级景好鼠标录制器 v2.1 单文件版,支持轨迹+鼠标键盘录制复刻
[Windows] 轻量级景好鼠标录制器 链接:https://pan.xunlei.com/s/VOLHz0rPyqdhV4bgyTYuW6W7A1?pwd98uj# 软件特性: 高效播放控制:动作间隔优化至100 ms,进度条可视化,支持随机循环/多次播放。 深度自定义࿱…...
表单 schema 配置化
一、前沿 基于 Ant Design Vue 组件库实现了表单的配置化生成,通过 schema 配置化的方式实现表单的动态渲染、数据绑定和更新等功能,而提交按钮及获取数据逻辑由使用方自行提供。通过 schema 对象来定义表单的结构和属性,modelData 对象存储…...
LINUX --- KVM
什么是 KVM?– 基于内核的虚拟机简介 – AWS (amazon.com) 什么是 KVM? 基于内核的虚拟机(KVM)是一种软件功能,您可以将其安装在物理 Linux 机器上以创建虚拟机。虚拟机是一种软件应用程序,可作为另一台实…...
LabVIEW VI Scripting实现连接器窗格自动化
通过VI Scripting自动化配置连接器窗格,可大幅提升开发效率、统一接口规范,并适配动态需求。以下为真实场景中的典型应用案例,涵盖工业、汽车电子及教育领域,展示其实际价值与实施效果。 特点: 程序化配置:…...
网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合
目录 一、dirsearch 工具详细使用攻略 1. 安装 前提条件 安装步骤 可选:直接下载预编译版本 2. 基本用法 命令格式 参数说明 示例 3. 核心功能与高级用法 3.1 多线程加速 3.2 自定义字典 3.3 递归扫描 3.4 过滤响应 3.5 添加请求头 3.6 代理支持 3…...
【Msq8.0无需登陆进行重置密码】
【Msq8.0无需登陆进行重置密码】 Mysql的正常启动设置Msql的无密码登陆前操作 Mysql的正常启动 我使用的是Mac电脑,电脑上的Mysql8.0是处于运行状态,如果关闭状态也可以。 设置Msql的无密码登陆前操作 我们对Markdown编辑器进行了一些功能拓展与语法支…...
pandas表格内容比较
前阵子来了一个211大学实习生(小男生),要比较2个版本字段的变化,辅助完成系统升级字段替换,要求找出哪些字段是新增的,哪些字段是删除的,哪些字段是属性信息修改的,要求半天时间搞定…...
TMS320F28P550SJ9学习笔记13: 软件I2C_驱动AT24Cxx存储芯片
今日尝试配置软件I2C通信,我的目标通信芯片是AT24C64,相较于AT24C02这样的8位寻址,它是16位寻址的,所以有些不同 文章提供测试代码讲解、完整工程下载、测试效果图 目录 软件I2C引脚初始化: C内联函数改变SCL与SDA的输…...
Vuex 基础概念与环境搭建
Vuex 是实现数据集中式状态管理的插件。所有组件共享 Vuex 中的数据,当任意组件修改数据时,其他组件会同步更新。与全局事件总线的区别在于: 全局事件总线:数据传递但未真正共享Vuex:数据存储在中央仓库,实…...
手抖预防方法主要包括以下几个方面
手抖预防方法主要包括以下几个方面: 1. 心理调节:保持心情舒畅,避免过度紧张和焦虑。如有必要,可以寻求心理医生帮助进行心理调适。 2. 充分休息:保证充足的睡眠时间,避免熬夜和过度劳累。合理安排工作和…...
使用libwebsocket写一个server
lws-minimal-ws-server这些例程在buildroot里面,更新的话只能整体编译,十分麻烦和耗时,在sdk外面建立项目,单独开发,会更合适。 创建程序文件夹和文件 mkdir ./ws_cam cd ./ws_cam cp ../luckfox-pico/sysdrv/source…...
SpringBoot MCP 入门使用
随着AI的火爆,最近发现MCP在未来确实大有可为,作为一名javaer怎么可以落后在历史洪流呢,根据官网和cursor也从零开始体验一下自定义mcp server。以后可以根据自己业务场景做出各种适合自身业务的工具。 至于什么是MCP 可以到https://modelcon…...
Windows 11 安装Docker Desktop环境
1、确认CPU开启虚拟化 打开任务管理器,切换到“性能”选项卡,查看 CPU 信息。若“虚拟化”状态显示为“已启用”,则表示虚拟化已开启;若显示为“已禁用”,则需要在启动时进入 BIOS 开启虚拟化设置(若显示已…...
C++ STL算法函数 —— 应用及其操作实现
一、STL算法函数分类概述 STL算法库提供了大量实用函数,按功能可分为以下五类: 1. 不修改序列的操作 定义:这些算法不会改变容器中的元素,仅对数据进行查询或统计。 典型函数: 函数功能示例find(first, last, value…...
汽车保养记录用什么软件记录,汽车维修记录查询系统,佳易王汽车保养维护服务记录查询管理系统操作教程
一、概述 本实例以佳易王汽车保养维护服务记录查询管理系统为例说明,其他版本可参考本实例。试用版软件资源可到文章最后了解,下载的文件为压缩包文件,请使用免费版的解压工具解压即可试用。 软件特点:1、功能实用,操…...
深入理解C/C++堆数据结构:从原理到实战
一、堆的本质与特性 1.1 什么是堆数据结构? 堆(Heap)是一种特殊的完全二叉树,它满足以下核心性质: 堆序性:每个节点的值都满足特定顺序关系 结构性:完全二叉树的结构特性(除最后一…...
WebRTC中音视频服务质量QoS之RTT衡量网络往返时延的加权平均RTT计算机制详解
WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解 WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解 WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解前言一、 RTT 网络往返时延的原理1、…...
【MATLAB实战】实现白鲸算法(BWO)优化BP神经网络:提升模型性能的新思路
一、什么是白鲸优化算法(BWO)? 白鲸优化算法是受自然界中白鲸群体行为和觅食策略启发的一种新型智能优化算法。白鲸在捕食过程中展现出高效的协作能力和适应性,例如通过“回声定位”搜索猎物位置群体间信息共享,这些行…...
