查看: 521|回复: 3

PyAutoGUI实战:图像识别定位与办公批量录入

[复制链接]
发表于 前天 10:00 | 显示全部楼层 |阅读模式
桌面自动化脚本在办公场景中经常用来处理重复性操作,比如批量录入表格数据、自动登录客户端软件。不少开发者遇到坐标定位不准、跨分辨率失效的问题,图像识别匹配按钮能从根本上解决。本文基于PyAutoGUI库,从环境安装、核心操作、图像匹配到完整实战案例,给出可直接复用的代码和配置要点。

一、环境安装与依赖
PyAutoGUI通过pip安装:
  1. pip install pyautogui
复制代码
如果下载慢,可以指定清华镜像:
  1. pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码
图像识别功能需要额外安装OpenCV、pyscreeze和Pillow:
  1. pip install opencv-python pyscreeze pillow
复制代码
Windows系统无需额外配置。macOS需要在“系统偏好设置-安全性与隐私-屏幕录制”中为终端或Python解释器授权,否则模拟键盘鼠标会失效。Linux(Ubuntu/CentOS)需要安装系统图形依赖:
  1. sudo apt-get install python3-xlib scrot
复制代码
安装完成后运行验证脚本:
  1. import pyautogui
  2. width, height = pyautogui.size()
  3. print(f"当前屏幕宽:{width},高:{height}")
  4. x, y = pyautogui.position()
  5. print(f"当前鼠标坐标 X:{x} Y:{y}")
复制代码
正常输出分辨率和鼠标坐标表示环境就绪。

二、鼠标与键盘操作
鼠标控制主要使用moveTo、click、scroll等方法。moveTo指定坐标和移动时长:
  1. pyautogui.moveTo(x=100, y=200, duration=0.5)
  2. pyautogui.moveRel(xOffset=200, yOffset=100, duration=0.3)
复制代码
click支持左键、右键、双击和拖拽:
  1. pyautogui.click(x=300, y=400)
  2. pyautogui.rightClick(x=300, y=400)
  3. pyautogui.doubleClick(x=300, y=400)
  4. pyautogui.dragTo(500, 500, duration=0.4)
复制代码
scroll参数为正向上滚动,负值向下滚动。
键盘操作通过write输入字符串,press发送单个按键,hotkey发送组合键:
  1. pyautogui.write("测试自动化输入文本", interval=0.1)
  2. pyautogui.press("enter", presses=2, interval=0.2)
  3. pyautogui.hotkey("ctrl", "c")
复制代码
interval参数控制输入间隔,防止应用漏字。常用按键名称包括esc、tab、shift、ctrl、alt、space、up、down、left、right、pageup、pagedown、backspace、delete、f1~f12。

三、截图与图像识别定位
固定坐标脚本在分辨率变化后失效,图像匹配是通用方案。先截取软件按钮的图片作为模板,脚本在屏幕中查找并返回坐标。
基础截图:
  1. screen_img = pyautogui.screenshot()
  2. screen_img.save("screen.png")
  3. area_img = pyautogui.screenshot(region=(0, 0, 500, 300))
复制代码
图像匹配使用locateOnScreen函数,confidence参数控制匹配精度:
  1. try:
  2.     target_pos = pyautogui.locateOnScreen("btn_submit.png", confidence=0.8)
  3.     center_x, center_y = pyautogui.center(target_pos)
  4.     pyautogui.click(center_x, center_y)
  5. except Exception as e:
  6.     print("未找到目标按钮")
复制代码
为了应对弹窗延迟,编写等待函数循环检测:
  1. def wait_click_img(img_path, wait_time=10, confidence=0.8):
  2.     start_time = time.time()
  3.     while time.time() - start_time < wait_time:
  4.         pos = pyautogui.locateOnScreen(img_path, confidence=confidence)
  5.         if pos:
  6.             x, y = pyautogui.center(pos)
  7.             pyautogui.click(x, y)
  8.             return True
  9.         time.sleep(0.5)
  10.     print(f"{img_path} 超时未找到")
  11.     return False
复制代码

四、实战案例:办公表格批量录入
场景是打开Excel,定位起始单元格,循环写入多行数据,最后保存。不依赖Excel库,纯桌面自动化:
  1. import pyautogui
  2. import time
  3. pyautogui.PAUSE = 0.6
  4. input_data = [
  5.     "张三,26,运营",
  6.     "李四,30,技术",
  7.     "王五,24,财务"
  8. ]
  9. start_x, start_y = 250, 320
  10. pyautogui.click(start_x, start_y)
  11. time.sleep(0.3)
  12. for line in input_data:
  13.     pyautogui.write(line)
  14.     pyautogui.press("enter")
  15.     time.sleep(0.2)
  16. pyautogui.hotkey("ctrl", "s")
  17. print("数据录入完成")
复制代码

五、实战案例:客户端软件自动登录(图像识别版)
目录结构:auto_login.py 和 img/ 文件夹存放 username_input.png、password_input.png、login_btn.png 三张截图。
  1. import pyautogui
  2. import time
  3. pyautogui.PAUSE = 0.7
  4. def wait_click(img, wait=10):
  5.     pos = pyautogui.locateOnScreen(img, confidence=0.7, timeout=wait)
  6.     if pos:
  7.         pyautogui.click(pyautogui.center(pos))
  8.         time.sleep(0.4)
  9.         return True
  10.     return False
  11. wait_click("img/username_input.png")
  12. pyautogui.write("admin123")
  13. time.sleep(0.3)
  14. wait_click("img/password_input.png")
  15. pyautogui.write("mima456789")
  16. time.sleep(0.3)
  17. wait_click("img/login_btn.png")
  18. print("登录流程执行完毕")
复制代码

六、关键配置与安全机制
设置全局操作间隔:
  1. pyautogui.PAUSE = 0.5
复制代码
开启安全故障中断,当鼠标移动到屏幕左上角时立即抛出异常终止脚本:
  1. pyautogui.FAILSAFE = True
复制代码
图像匹配精度confidence取值0~1:0.6~0.7容错高,适合界面有色差或缩放;0.8~0.9严格匹配,适合固定界面。

七、生产优化建议
统一设置PAUSE避免操作过快;截取按钮图片时只保留目标区域,减少背景干扰;固定分辨率内网环境可用坐标,多设备场景必须用图像识别;循环外层增加try except捕获异常,记录日志;运行前关闭弹窗和广告避免遮挡;部分桌面客户端需要管理员权限启动Python脚本才能正常模拟输入;电脑锁屏后无法截图,图像识别会失效。

以上代码在Windows、macOS、Linux全平台均可运行,只要系统依赖已安装并授权。PyAutoGUI配合图像识别可以稳定处理大量重复桌面操作,提升办公效率。
回复

使用道具 举报

发表于 前天 10:10 | 显示全部楼层

Re: PyAutoGUI实战:图像识别定位与办公批量录入

楼主这篇文章非常实用,尤其是图像识别定位部分,解决了跨分辨率脚本失效的痛点。之前我写自动化脚本一直依赖固定坐标,换台电脑就崩,后来改用locateOnScreen配合confidence确实稳定多了。不过有个问题想请教一下:如果按钮在不同主题或背景色下有轻微差异,用0.8的置信度还是经常匹配失败,有没有推荐的预处理方法(比如灰度化或者增强对比度)?另外实战案例里的循环录入,如果某行数据有特殊字符导致输入速度跟不上的话,调大interval能解决吗?期待后续分享更多办公场景的坑点和技巧。
回复 支持 反对

使用道具 举报

发表于 前天 10:10 | 显示全部楼层

Re: PyAutoGUI实战:图像识别定位与办公批量录入

感谢楼主的分享,内容非常详尽,尤其图像识别解决坐标漂移的思路很实用。我在处理不同分辨率屏幕时也遇到过类似问题,之前用相对坐标配合缩放比例,但稳定性不如图像匹配。想请教一下,模板截图的分辨率建议保留原尺寸还是可以缩放?另外 `confidence` 参数调整到多少能在精度和速度上取得较好平衡?期待继续看到更多实战案例。
回复 支持 反对

使用道具 举报

发表于 前天 10:10 | 显示全部楼层

Re: PyAutoGUI实战:图像识别定位与办公批量录入

很棒的教程!图像识别定位确实能解决跨分辨率问题,我之前用固定坐标在多台电脑上部署时频繁报错,换成基于模板匹配后稳定多了。不过在实际使用中,我遇到过按钮背景色变化导致匹配失败的情况,楼主有没有调整 confidence 或预处理图片(比如转灰度)的经验?另外 macOS 权限那部分很关键,第一次授权时很多人会忽略。谢谢分享,代码可以直接跑起来测试,很实用!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-15 04:07 , Processed in 0.025169 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部