桌面自动化脚本在办公场景中经常用来处理重复性操作,比如批量录入表格数据、自动登录客户端软件。不少开发者遇到坐标定位不准、跨分辨率失效的问题,图像识别匹配按钮能从根本上解决。本文基于PyAutoGUI库,从环境安装、核心操作、图像匹配到完整实战案例,给出可直接复用的代码和配置要点。
一、环境安装与依赖
PyAutoGUI通过pip安装:如果下载慢,可以指定清华镜像:- pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 图像识别功能需要额外安装OpenCV、pyscreeze和Pillow:- pip install opencv-python pyscreeze pillow
复制代码 Windows系统无需额外配置。macOS需要在“系统偏好设置-安全性与隐私-屏幕录制”中为终端或Python解释器授权,否则模拟键盘鼠标会失效。Linux(Ubuntu/CentOS)需要安装系统图形依赖:- sudo apt-get install python3-xlib scrot
复制代码 安装完成后运行验证脚本:- import pyautogui
- width, height = pyautogui.size()
- print(f"当前屏幕宽:{width},高:{height}")
- x, y = pyautogui.position()
- print(f"当前鼠标坐标 X:{x} Y:{y}")
复制代码 正常输出分辨率和鼠标坐标表示环境就绪。
二、鼠标与键盘操作
鼠标控制主要使用moveTo、click、scroll等方法。moveTo指定坐标和移动时长:- pyautogui.moveTo(x=100, y=200, duration=0.5)
- pyautogui.moveRel(xOffset=200, yOffset=100, duration=0.3)
复制代码 click支持左键、右键、双击和拖拽:- pyautogui.click(x=300, y=400)
- pyautogui.rightClick(x=300, y=400)
- pyautogui.doubleClick(x=300, y=400)
- pyautogui.dragTo(500, 500, duration=0.4)
复制代码 scroll参数为正向上滚动,负值向下滚动。
键盘操作通过write输入字符串,press发送单个按键,hotkey发送组合键:- pyautogui.write("测试自动化输入文本", interval=0.1)
- pyautogui.press("enter", presses=2, interval=0.2)
- pyautogui.hotkey("ctrl", "c")
复制代码 interval参数控制输入间隔,防止应用漏字。常用按键名称包括esc、tab、shift、ctrl、alt、space、up、down、left、right、pageup、pagedown、backspace、delete、f1~f12。
三、截图与图像识别定位
固定坐标脚本在分辨率变化后失效,图像匹配是通用方案。先截取软件按钮的图片作为模板,脚本在屏幕中查找并返回坐标。
基础截图:- screen_img = pyautogui.screenshot()
- screen_img.save("screen.png")
- area_img = pyautogui.screenshot(region=(0, 0, 500, 300))
复制代码 图像匹配使用locateOnScreen函数,confidence参数控制匹配精度:- try:
- 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("未找到目标按钮")
复制代码 为了应对弹窗延迟,编写等待函数循环检测:- 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
复制代码
四、实战案例:办公表格批量录入
场景是打开Excel,定位起始单元格,循环写入多行数据,最后保存。不依赖Excel库,纯桌面自动化:- import pyautogui
- import time
- pyautogui.PAUSE = 0.6
- input_data = [
- "张三,26,运营",
- "李四,30,技术",
- "王五,24,财务"
- ]
- 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)
- pyautogui.hotkey("ctrl", "s")
- print("数据录入完成")
复制代码
五、实战案例:客户端软件自动登录(图像识别版)
目录结构: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
- wait_click("img/username_input.png")
- pyautogui.write("admin123")
- time.sleep(0.3)
- wait_click("img/password_input.png")
- pyautogui.write("mima456789")
- time.sleep(0.3)
- wait_click("img/login_btn.png")
- print("登录流程执行完毕")
复制代码
六、关键配置与安全机制
设置全局操作间隔:开启安全故障中断,当鼠标移动到屏幕左上角时立即抛出异常终止脚本:- pyautogui.FAILSAFE = True
复制代码 图像匹配精度confidence取值0~1:0.6~0.7容错高,适合界面有色差或缩放;0.8~0.9严格匹配,适合固定界面。
七、生产优化建议
统一设置PAUSE避免操作过快;截取按钮图片时只保留目标区域,减少背景干扰;固定分辨率内网环境可用坐标,多设备场景必须用图像识别;循环外层增加try except捕获异常,记录日志;运行前关闭弹窗和广告避免遮挡;部分桌面客户端需要管理员权限启动Python脚本才能正常模拟输入;电脑锁屏后无法截图,图像识别会失效。
以上代码在Windows、macOS、Linux全平台均可运行,只要系统依赖已安装并授权。PyAutoGUI配合图像识别可以稳定处理大量重复桌面操作,提升办公效率。 |