PyAutoGUI:Python 桌面自动化框架详解

一、PyAutoGUI 核心介绍

PyAutoGUI 是一款跨平台(支持 Windows、macOS、Linux)的 Python 桌面自动化库,能够模拟用户的鼠标移动、点击、滚轮操作键盘输入,还支持屏幕截图、图像识别定位等功能,广泛用于重复性桌面操作自动化(如表单填写、软件操作、批量处理等)。

二、安装步骤

直接通过 pip 命令安装,命令简洁无复杂依赖:

pip install pyautogui

补充:若安装失败(如 macOS 需额外依赖),可参考官方文档适配系统环境,Windows 系统通常可直接安装成功。

三、核心功能详解

  自动获取当前鼠标位置:

import pyautogui import time try: while True: x, y = pyautogui.position() #获得鼠标所在位置 print(x,y) #打印当前鼠标所处位置 time.sleep(1) except KeyboardInterrupt: print('\nExit.') 

(一)鼠标操作:模拟用户鼠标行为

PyAutoGUI 提供了完整的鼠标模拟接口,核心包括移动、点击、拖拽等,所有操作均基于屏幕坐标系统(屏幕左上角为原点 (0, 0),向右为 x 轴正方向,向下为 y 轴正方向)。

1. 鼠标移动

  • 基础移动:将鼠标从当前位置移动到指定坐标 (x, y)
import pyautogui # duration:移动耗时(秒),可选参数,默认瞬间移动 pyautogui.moveTo(x=100, y=200, duration=0.5)
  • 相对移动:基于当前鼠标位置,偏移指定像素(dx 为 x 轴偏移,dy 为 y 轴偏移)
# 向右移动 50 像素,向下移动 30 像素,耗时 0.3 秒 pyautogui.moveRel(dx=50, dy=30, duration=0.3)

2. 鼠标点击

  • 基础点击:在指定坐标执行鼠标左键单击
# 在 (100, 200) 位置单击左键,duration 为移动到目标位置的耗时 pyautogui.click(x=100, y=200, duration=0.2)
  • 指定按键点击:支持左键(left)、右键(right)、中键(middle)
# 右键单击 pyautogui.click(x=100, y=200, button='right', duration=0.2) # 中键单击 pyautogui.click(x=100, y=200, button='middle', duration=0.2)
  • 双击/三击:快速执行多次点击
# 左键双击 pyautogui.doubleClick(x=100, y=200, duration=0.2) # 左键三击 pyautogui.tripleClick(x=100, y=200, duration=0.2)

3. 鼠标拖拽

模拟鼠标按住并拖动的行为,常用于文件拖拽、窗口调整等场景:

# 从 (x1, y1) 拖拽到 (x2, y2),按住左键拖拽 pyautogui.dragTo(x=300, y=400, duration=0.8, button='left') # 相对拖拽:基于当前位置偏移拖拽 pyautogui.dragRel(dx=100, dy=50, duration=0.5, button='left')

4. 鼠标滚轮

模拟滚轮滚动行为,clicks 参数指定滚动幅度(正数向上滚,负数向下滚):

# 向下滚动 5 格(负数表示向下) pyautogui.scroll(clicks=-5, x=100, y=200) # 向上滚动 3 格(正数表示向上) pyautogui.scroll(clicks=3, x=100, y=200)

(二)键盘操作:模拟输入与快捷键

1. 普通文本输入

使用 typewrite() 方法输入字符串,支持指定输入间隔(模拟人工输入速度):

# 直接输入文本 pyautogui.typewrite("Hello, PyAutoGUI!") # 带间隔输入(每个字符间隔 0.2 秒) pyautogui.typewrite("Hello, PyAutoGUI!", interval=0.2)

2. 特殊按键输入

对于回车键、空格键、快捷键等特殊按键,需使用按键名称(封装在 PyAutoGUI 中),核心方法:

  • press():单次按下并释放某个按键
  • keyDown():按住某个按键不释放
  • keyUp():释放按住的按键
# 单个特殊按键:按下并释放回车键 pyautogui.press('enter') # 组合快捷键:Ctrl + C(复制) pyautogui.keyDown('ctrl') pyautogui.press('c') pyautogui.keyUp('ctrl') # 简化组合快捷键:使用 hotkey() 方法(推荐) pyautogui.hotkey('ctrl', 'c')  # 复制 pyautogui.hotkey('ctrl', 'v')  # 粘贴 pyautogui.hotkey('ctrl', 'a')  # 全选

常用特殊按键名称:enter(回车)、space(空格)、backspace(删除)、tab(制表符)、shift、ctrl、alt 等。

(三)屏幕与图像识别:定位目标元素

1. 屏幕基础信息获取

获取屏幕分辨率(用于确定坐标范围):

# 获取屏幕宽度和高度 screen_width, screen_height = pyautogui.size() print(f"屏幕分辨率:{screen_width} × {screen_height}") # 获取当前鼠标位置坐标 mouse_x, mouse_y = pyautogui.position() print(f"当前鼠标位置:({mouse_x}, {mouse_y})")

2. 图像定位:查找屏幕上的目标图像

PyAutoGUI 支持通过目标图像(如按钮截图、图标截图),自动查找其在屏幕上的坐标,核心方法 locateOnScreen()。

步骤说明

  1. 先截取目标元素的截图(保存为 PNG 格式,推荐使用截图工具精准截取)
  2. 使用 locateOnScreen() 查找图像位置,返回目标区域的坐标和尺寸
  3. 通过 center() 方法获取目标区域的中心坐标(便于点击等操作)
import pyautogui import time # 等待 3 秒,预留时间切换到目标屏幕 time.sleep(3) try:     # 查找目标图像(image.png 为目标截图路径)     # confidence:匹配精度(0-1,默认 1,降低精度可提高查找成功率,需安装 opencv-python 支持)     target_location = pyautogui.locateOnScreen('image.png', confidence=0.8)     if target_location:         # 获取目标图像的中心坐标         target_center = pyautogui.center(target_location)         print(f"目标图像位置:{target_location},中心坐标:{target_center}")         # 点击目标中心         pyautogui.click(target_center.x, target_center.y, duration=0.2)     else:         print("未找到目标图像") except Exception as e:     print(f"查找失败:{e}")

注意:使用 confidence 参数时,需额外安装 opencv-python:pip install opencv-python

3. 屏幕截图

# 截取整个屏幕并保存为文件 pyautogui.screenshot('full_screen.png') # 截取指定区域屏幕(x1, y1, 宽度, 高度) pyautogui.screenshot('partial_screen.png', region=(100, 100, 300, 200))

(四)安全机制:防止自动化失控

PyAutoGUI 提供了关键的安全保护机制,避免自动化操作失控(如鼠标移到屏幕边缘无法找回、无限循环操作等):

1. 故障安全触发

默认开启:当鼠标移动到屏幕左上角(坐标 (0, 0))时,会立即抛出 FailSafeException 异常,终止所有自动化操作:

# 若操作失控,快速将鼠标移到屏幕左上角即可停止程序 try:     while True:         pyautogui.moveRel(10, 0, duration=0.1) except pyautogui.FailSafeException:     print("故障安全机制触发,程序终止")

2. 操作延迟

通过 PAUSE 属性设置所有 PyAutoGUI 操作的默认间隔时间(秒),便于观察操作过程,也可防止操作过快导致程序异常:

# 设置所有操作间隔 0.5 秒 pyautogui.PAUSE = 0.5

四、实战示例:简单自动化操作

import pyautogui import time # 安全设置 pyautogui.PAUSE = 0.5  # 操作间隔 0.5 秒 pyautogui.FAILSAFE = True  # 开启故障安全机制 # 1. 等待 5 秒,预留时间打开记事本 print("5 秒后开始操作,请打开记事本...") time.sleep(5) # 2. 输入文本 pyautogui.typewrite("Python 自动化 - PyAutoGUI 实战", interval=0.1) # 3. 换行 pyautogui.press('enter') # 4. 输入第二行文本 pyautogui.typewrite("这是一个简单的自动化演示", interval=0.1) # 5. 全选文本(Ctrl + A) pyautogui.hotkey('ctrl', 'a') # 6. 复制文本(Ctrl + C) pyautogui.hotkey('ctrl', 'c') # 7. 弹窗提示操作完成 pyautogui.alert("自动化操作完成!")

Read more

Flutter 三方库 persistent_cache_simple 的鸿蒙化适配指南 - 实现具备磁盘溢出淘汰与极简 API 的本地持久化缓存、支持端侧资源异步落地与状态秒开实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 persistent_cache_simple 的鸿蒙化适配指南 - 实现具备磁盘溢出淘汰与极简 API 的本地持久化缓存、支持端侧资源异步落地与状态秒开实战 前言 在进行 Flutter for OpenHarmony 应用开发时,如何高效、持久地缓存一些网络 JSON、配置片段或临时计算结果?传统的 shared_preferences 在处理大段字符串时性能受限,且缺乏生命周期淘汰机制。persistent_cache_simple 是一款功能专一、基于文件系统的轻量级缓存库。本文将探讨如何在鸿蒙端构建极致、稳健的二级缓存体系。 一、原直观解析 / 概念介绍 1.1 基础原理 该库建立在“键值映射至文件(Key-to-File)”的简易架构之上。它利用鸿蒙应用的沙箱存储目录,将每一个缓存项序列化为独立的文件。

By Ne0inhk
Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案

Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案 前言 在构建具备高度自动化能力的鸿蒙(OpenHarmony)应用时,“定时触发”是一个绕不开的核心需求。无论是每天凌晨三点的数据库自动化维护,还是每隔五分钟的环境温湿度同步录入,一套稳定、标准的定时规则描述符(Cron Expression)是支撑这些后台逻辑的核心心脏。 虽然简单的 Timer 能够处理定时的延时,但对于诸如“每个月最后一个周五的 14:00 运行”这种复杂的业务逻辑,手动编写判断代码将是维护者的噩梦。 cron_parser 是一款专为 Dart 设计的高性能 Cron 表达式解析器。它不仅支持标准的五段式、六段式语法,更提供了极低延迟的“

By Ne0inhk

Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎 在鸿蒙(OpenHarmony)系统的端侧服务器化、分布式设备互联监控、或者是需要将鸿蒙应用转变为一个能够提供 API 服务的微型网关(如鸿蒙版物联网中枢)场景中,如何通过一套 Dart 代码构建出极致稳健、带路由拦截、支持 Session 且完全透明的 HTTP 服务?jaguar 为开发者提供了一套工业级的、基于生产环境优化的服务端处理方案。本文将深入实战其在鸿蒙端侧服务化中的应用。 前言 什么是 Jaguar?它不是一个普通的 HTTP 监听器,而是一个专为“速度”与“扩展性”

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)

Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在 OpenHarmony 应用中,为了保证在不同分辨率屏幕(手机、折叠屏、平板)下图标都能保持绝对清晰,且为了减小 HAP 包体积,使用“字体图标”取代“位图图片”是业界公认的标准方案。 icon_font_generator 是一个强大的命令行工具。它能将一整组 SVG 图标自动打包成一个 .ttf 字体文件,并同步生成 Dart 类。开发者只需关注 SVG 文件的增删,剩余的同步工作全部自动化。 一、全自动构建链路 命令行扫描 强类型访问 assets/ohos_icons/*.svg (原始素材) icon_font_generator

By Ne0inhk