Python桌面自动化PyAutoGUI完整实战教程:模拟鼠标键盘、窗口操作、图形识别自动化

文章目录

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

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

1. 基础库安装

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

bash 复制代码
pip install pyautogui

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

bash 复制代码
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple

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

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

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

3. 系统特殊依赖说明

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

4. 环境验证脚本

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

python 复制代码
import pyautogui

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

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

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

(一)鼠标控制全套操作

1. 鼠标移动、定点移动
python 复制代码
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. 鼠标单击、双击、右键、长按拖拽
python 复制代码
# 左键单击当前鼠标位置
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. 滚轮上下滚动
python 复制代码
# 向上滚动10格
pyautogui.scroll(10)
# 向下滚动20格
pyautogui.scroll(-20)

(二)键盘输入全套操作

1. 输入文字、回车换行
python 复制代码
# 直接输入字符串,支持中文(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等)
python 复制代码
# 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. 基础截图功能

python 复制代码
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,脚本自动识别坐标:

python 复制代码
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. 循环等待弹窗/按钮出现(高频使用)

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

python 复制代码
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第三方库。

python 复制代码
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

自动化登录脚本:

python 复制代码
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. 全局操作间隔

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

python 复制代码
# 每次操作后暂停0.5秒
pyautogui.PAUSE = 0.5

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

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

python 复制代码
# 开启安全故障中断
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. 不要后台休眠运行
    电脑锁屏、休眠后无法读取屏幕画面,图像识别功能完全失效。
相关推荐
用户0190275816112 分钟前
如何用 Python 回测肯特纳通道(Keltner Channel)突破策略?(EMA+ATR 通道)
python
其实防守也摸鱼20 分钟前
渗透测试学习计划(全栈综合 · 零基础进阶)
android·数据库·学习·安全·oracle·自动化·学习方法
老歌老听老掉牙25 分钟前
基于Frenet-Serret框架的自然轴系关系推导与SymPy验证
python·sympy·自然轴系
Java后端的Ai之路27 分钟前
Python 进阶探索25 - difflib模块之文本对比
开发语言·python·django·哈希算法·difflib
28 分钟前
一个天才写了三年Python,最后发现装饰器最有用的用法只有3个
python
全栈练习生29 分钟前
大模型原理之 MoE 混合专家模型
python·ai
askama0033 分钟前
Ubuntu安装Anaconda并配置环境
linux·python
计算机编程指导师41 分钟前
【计算机毕设选题】基于Hadoop的电信网络诈骗话术语义特征挖掘分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·数据库·python
CS创新实验室1 小时前
Python 的鸭子类型
开发语言·windows·python
ThinkerQAQ_1 小时前
并发编程(七):volatile——从语言规则到 CPU
java·python·go