Python桌面自动化PyAutoGUI的完整实战教程

 更新时间:2026年07月13日 09:22:26   作者:爱吃提升  
本文从PyAutoGUI环境安装、鼠标键盘控制、图像识别定位到完整办公自动化实战,带你一步步掌握桌面自动化,所有代码复制即用,适配Windows、MacOS、Linux全平台,并分享避坑优化技巧,让你的自动化脚本更稳定高效

很多新手刚接触桌面自动化时会踩坑:坐标定位不准、不同分辨率脚本失效、程序运行卡顿、操作速度太快软件响应跟不上。本文从环境安装、基础函数、图像识别定位、完整实战案例到避坑优化方案全部落地,所有代码复制即可运行,适配Windows、MacOS、Linux全平台,兼顾新手入门和办公自动化真实业务场景。

一、PyAutoGUI环境安装与前置依赖

1. 基础库安装

PyAutoGUI核心库通过pip直接安装,打开cmd/终端执行:

pip install pyautogui

国内下载慢可切换清华镜像源加速:

pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 配套依赖库(图像识别必装)

单纯鼠标键盘操作无需额外组件,如果需要通过图片匹配按钮、弹窗实现精准定位,必须安装OpenCV和pyscreeze:

pip install opencv-python pyscreeze pillow
  • Pillow:截图、图片处理底层依赖
  • pyscreeze:PyAutoGUI内置截图工具
  • opencv-python:图像匹配,大幅提升按钮识别准确率

3. 系统特殊依赖说明

  1. Windows系统:无需额外系统组件,安装库后直接运行,管理员权限运行脚本可避免部分软件拦截模拟操作。
  2. MacOS系统:运行脚本前需要给终端、Python解释器开启屏幕录制、辅助控制权限,否则鼠标键盘模拟会失效。
  3. Linux系统(Ubuntu/CentOS):需要安装系统图形依赖:
sudo apt-get install python3-xlib scrot

4. 环境验证脚本

新建test_env.py,运行测试库是否正常导入:

import pyautogui

# 打印屏幕分辨率
width, height = pyautogui.size()
print(f"当前屏幕宽:{width},高:{height}")
# 获取当前鼠标坐标
x, y = pyautogui.position()
print(f"当前鼠标坐标 X:{x} Y:{y}")

执行无报错、正常输出分辨率和鼠标坐标代表环境搭建完成。

二、PyAutoGUI核心基础函数(鼠标+键盘)

鼠标控制全套操作

1. 鼠标移动、定点移动

import pyautogui
import time

# 鼠标移动到指定坐标(100,200),耗时0.5秒平滑移动
pyautogui.moveTo(x=100, y=200, duration=0.5)

# 相对当前位置偏移移动,向右200,向下100
pyautogui.moveRel(xOffset=200, yOffset=100, duration=0.3)

# 延迟等待,给软件加载留出响应时间
time.sleep(0.5)

2. 鼠标单击、双击、右键、长按拖拽

# 左键单击当前鼠标位置
pyautogui.click()
# 指定坐标左键单击
pyautogui.click(x=300, y=400)
# 右键单击
pyautogui.rightClick(x=300, y=400)
# 双击左键
pyautogui.doubleClick(x=300, y=400)

# 拖拽:从当前位置拖动到(500,500)
pyautogui.dragTo(500, 500, duration=0.4)
# 相对拖拽
pyautogui.dragRel(100, -100, duration=0.3)

3. 滚轮上下滚动

# 向上滚动10格
pyautogui.scroll(10)
# 向下滚动20格
pyautogui.scroll(-20)

键盘输入全套操作

1. 输入文字、回车换行

# 直接输入字符串,支持中文(Windows原生支持,Mac/Linux需额外适配)
pyautogui.write("测试自动化输入文本", interval=0.1)
# interval控制每个字符输入间隔,防止软件识别漏字

# 按下回车键
pyautogui.press("enter")
# 连续按多次回车
pyautogui.press("enter", presses=2, interval=0.2)

2. 组合快捷键(Ctrl+C、Ctrl+V、Alt+Tab等)

# Ctrl + A 全选
pyautogui.hotkey("ctrl", "a")
# Ctrl + C 复制
pyautogui.hotkey("ctrl", "c")
# Ctrl + V 粘贴
pyautogui.hotkey("ctrl", "v")
# Alt + Tab 切换窗口
pyautogui.hotkey("alt", "tab")
# Ctrl + S 保存
pyautogui.hotkey("ctrl", "s")

3. 常用按键名称对照表

esc、tab、shift、ctrl、alt、space、up、down、left、right、pageup、pagedown、backspace、delete、f1~f12

三、截图与图像识别定位(自动化核心能力)

固定坐标脚本换电脑、调整分辨率后直接失效,图像匹配是通用解决方案,截取软件按钮图片,脚本自动在屏幕中查找对应位置并点击。

1. 基础截图功能

import pyautogui

# 全屏截图,保存到本地
screen_img = pyautogui.screenshot()
screen_img.save("screen.png")

# 区域截图:x,y,宽,高
area_img = pyautogui.screenshot(region=(0, 0, 500, 300))
area_img.save("area.png")

2. 图片匹配查找按钮

提前把软件里的按钮截图保存为btn_submit.png,脚本自动识别坐标:

import pyautogui
import time

# 查找图片在屏幕中的坐标,confidence匹配精度0~1,越高越严格
try:
    # locateOnScreen找到图片区域
    target_pos = pyautogui.locateOnScreen("btn_submit.png", confidence=0.8)
    # 获取图片中心点坐标
    center_x, center_y = pyautogui.center(target_pos)
    # 点击按钮
    pyautogui.click(center_x, center_y)
except Exception as e:
    print("未找到目标按钮,检查截图或匹配精度")

3. 循环等待弹窗/按钮出现(高频使用)

软件加载慢、弹窗延迟弹出,写循环持续检测,找到后再执行操作:

import pyautogui
import time

def wait_click_img(img_path, wait_time=10, confidence=0.8):
    start_time = time.time()
    while time.time() - start_time < wait_time:
        pos = pyautogui.locateOnScreen(img_path, confidence=confidence)
        if pos:
            x, y = pyautogui.center(pos)
            pyautogui.click(x, y)
            return True
        time.sleep(0.5)
    print(f"{img_path} 超时未找到")
    return False

# 调用:等待提交按钮最多10秒,出现自动点击
wait_click_img("btn_submit.png")

四、完整实战案例1:办公表格自动批量录入数据

业务场景:打开Excel,定位输入框,循环录入多行文本,自动换行保存,纯桌面自动化,无需调用Excel第三方库。

import pyautogui
import time

# 操作间隔,防止操作过快软件无响应
pyautogui.PAUSE = 0.6

# 待录入数据列表
input_data = [
    "张三,26,运营",
    "李四,30,技术",
    "王五,24,财务"
]

# 定位Excel输入起始单元格(提前获取坐标)
start_x, start_y = 250, 320
pyautogui.click(start_x, start_y)
time.sleep(0.3)

# 循环录入
for line in input_data:
    # 输入一行内容
    pyautogui.write(line)
    # 按下回车跳到下一行
    pyautogui.press("enter")
    time.sleep(0.2)

# Ctrl+S保存文件
pyautogui.hotkey("ctrl", "s")
print("数据录入完成")

五、完整实战案例2:客户端软件自动登录流程(图像识别版)

不用固定坐标,依靠图片识别登录按钮、输入框,更换分辨率也能正常运行。

目录结构:

auto_login/
├── auto_login.py
├── img/
    ├── username_input.png
    ├── password_input.png
    ├── login_btn.png

自动化登录脚本:

import pyautogui
import time

# 统一操作停顿时间
pyautogui.PAUSE = 0.7

# 封装等待点击函数
def wait_click(img, wait=10):
    pos = pyautogui.locateOnScreen(img, confidence=0.7, timeout=wait)
    if pos:
        pyautogui.click(pyautogui.center(pos))
        time.sleep(0.4)
        return True
    return False

# 1. 点击用户名输入框
wait_click("img/username_input.png")
pyautogui.write("admin123")
time.sleep(0.3)

# 2. 点击密码输入框
wait_click("img/password_input.png")
pyautogui.write("mima456789")
time.sleep(0.3)

# 3. 点击登录按钮
wait_click("img/login_btn.png")
print("登录流程执行完毕")

六、关键配置参数与安全中断机制

1. 全局操作间隔

所有鼠标键盘操作自动延迟,避免操作过快软件卡顿:

# 每次操作后暂停0.5秒
pyautogui.PAUSE = 0.5

2. 安全防卡死机制(必开)

脚本失控、无限循环点击时,将鼠标快速移动到屏幕左上角,程序会直接抛出异常终止,防止电脑被锁死:

# 开启安全故障中断
pyautogui.FAILSAFE = True

3. 图像匹配精度调节

confidence参数取值0~1:

  • 0.6~0.7:轻微色差、缩放界面也能识别,容错高
  • 0.8~0.9:匹配严格,适合界面固定无变化的软件

七、生产/办公自动化优化技巧

  1. 统一设置PAUSE停顿时间:不同软件加载速度不同,统一延长操作间隔,避免漏点击、漏输入文字。
  2. 截图素材尽量高清:截取按钮时只保留目标区域,不要多余背景,提升识别速度和准确率。
  3. 区分固定坐标与图像识别:固定界面、固定分辨率内网电脑可用坐标;多设备、窗口可缩放场景一律用图像匹配。
  4. 增加异常捕获:循环操作外层增加try except,识别不到按钮时打印日志,不直接中断整个脚本。
  5. 最小化其他窗口:运行自动化脚本前关闭弹窗、广告,避免遮挡目标按钮导致识别失败。
  6. 管理员权限运行:部分ERP、桌面客户端、加密软件会拦截模拟输入,管理员启动Python脚本可解决。
  7. 不要后台休眠运行:电脑锁屏、休眠后无法读取屏幕画面,图像识别功能完全失效。

到此这篇关于Python桌面自动化PyAutoGUI的完整实战教程的文章就介绍到这了,更多相关Python PyAutoGUI桌面自动化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python元类编程实现一个简单的ORM

    Python元类编程实现一个简单的ORM

    本文主要介绍了Python元类编程实现一个简单的ORM,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python lambda的使用详解

    python lambda的使用详解

    这篇文章主要介绍了python lambda的使用详解,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python设计足球联赛赛程表程序的思路与简单实现示例

    Python设计足球联赛赛程表程序的思路与简单实现示例

    足球联赛的赛制就是一支队伍在一个赛季中主客场分别面对联赛中除了自身以外的球队一次,对此我们可以使用一种循环算法来实现,接下来就一起来看一下Python设计足球联赛赛程表程序的思路与简单实现示例:
    2016-06-06
  • Python实现读取文件最后n行的方法

    Python实现读取文件最后n行的方法

    这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取、遍历与运算相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • 解决Python保存文件名太长OSError: [Errno 36] File name too lon

    解决Python保存文件名太长OSError: [Errno 36] File 

    这篇文章主要介绍了解决Python保存文件名太长OSError: [Errno 36] File name too lon问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python实现动态给类和对象添加属性和方法操作示例

    Python实现动态给类和对象添加属性和方法操作示例

    这篇文章主要介绍了Python实现动态给类和对象添加属性和方法操作,涉及Python面向对象程序设计中类与对象属性、方法的动态操作相关实现技巧,需要的朋友可以参考下
    2020-02-02
  • python将dict中的unicode打印成中文实例

    python将dict中的unicode打印成中文实例

    这篇文章主要介绍了python将dict中的unicode打印成中文实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python实现的调用C语言函数功能简单实例

    Python实现的调用C语言函数功能简单实例

    这篇文章主要介绍了Python实现的调用C语言函数功能,结合简单实例形式分析了Python使用ctypes模块调用C语言函数的具体步骤与相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python实现跨平台表格数据分页打印预览处理详解

    Python实现跨平台表格数据分页打印预览处理详解

    这篇文章主要为大家详细介绍了如何使用PySide6/PyQt6实现Python跨平台表格数据分页打印预览处理,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • Python图像分割之均匀性度量法分析

    Python图像分割之均匀性度量法分析

    均匀性度量图像分割是图像像素分割的一种方法,当然还有其他很多的方法。本文将主要介绍下其原理和实现代码,感兴趣的小伙伴可以学习一下
    2021-12-12

最新评论