PyAutoGUI实现跨平台桌面自动化,涵盖环境安装、鼠标键盘操作、图像识别定位。通过坐标定位与图像匹配两种方式,支持批量数据录入和自动登录等实战案例。提供全局停顿、安全中断、精度调节等优化配置,解决坐标失效、操作过快等问题,适用于办公自动化场景。
不少新手刚开始接触桌面自动化时,往往会在这些小细节上栽跟头:坐标定位不准、换台电脑脚本直接罢工、操作太快软件还没反应过来,结果程序跑得一塌糊涂。这篇文章从环境安装、基础函数、图像识别定位,到完整的实战案例和避坑优化方案,都给你捋清楚了。所有代码复制就能跑,支持Windows、MacOS、Linux全平台,既适合新手入门,也能应对办公自动化的真实场景。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
核心库的安装很简单,直接通过pip就能搞定。打开cmd或终端,执行下面这行命令:
pip install pyautogui
国内网络下载慢的话,可以临时切换清华镜像源来加速:
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
如果只是模拟鼠标键盘点一点、按一按,那上面一个库就够了。但要想通过图片定位按钮、弹窗,实现通用自动化,还得补上OpenCV和pyscreeze:
pip install opencv-python pyscreeze pillow
简单说下这几个库的用处:
sudo apt-get install python3-xlib scrot
新建一个 test_env.py 文件,把下面代码放进去跑一下,就能验证环境是否正常:
import pyautogui
# 打印屏幕分辨率
width, height = pyautogui.size()
print(f"当前屏幕宽:{width},高:{height}")
# 获取当前鼠标坐标
x, y = pyautogui.position()
print(f"当前鼠标坐标 X:{x} Y:{y}")
如果执行没有报错,并且正常输出了分辨率和鼠标坐标,那恭喜你,环境搭建完成。
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)
# 左键单击当前鼠标位置 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)
# 向上滚动10格 pyautogui.scroll(10) # 向下滚动20格 pyautogui.scroll(-20)
# 直接输入字符串,支持中文(Windows原生支持,Mac/Linux需额外适配)
pyautogui.write("测试自动化输入文本", interval=0.1)
# interval控制每个字符输入间隔,防止软件识别漏字
# 按下回车键
pyautogui.press("enter")
# 连续按多次回车
pyautogui.press("enter", presses=2, interval=0.2)
# 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")
esc、tab、shift、ctrl、alt、space、up、down、left、right、pageup、pagedown、backspace、delete、f1~f12
固定坐标的脚本有个致命弱点:换台电脑、调整一下分辨率,程序就彻底废了。更通用的解决方案是图像匹配——截取软件按钮的截图,让脚本自动在屏幕上找到它的位置,然后精准点击。
import pyautogui
# 全屏截图,保存到本地
screen_img = pyautogui.screenshot()
screen_img.sa ve("screen.png")
# 区域截图:x,y,宽,高
area_img = pyautogui.screenshot(region=(0, 0, 500, 300))
area_img.sa ve("area.png")
提前把软件里的按钮截图保存为 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("未找到目标按钮,检查截图或匹配精度")
软件加载有时很慢,弹窗可能延迟几秒才出现,这很正常。解决办法就是写一个循环持续检测,找到后再执行操作:
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")
场景很常见:打开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("数据录入完成")
这个案例全程依靠图片识别,不用固定坐标,即使换分辨率的电脑也能正常运行。
目录结构建议这样组织:
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("登录流程执行完毕")
设置一个全局停顿,能让所有鼠标键盘操作之间自动保持间隔,避免操作过快导致软件卡顿:
# 每次操作后暂停0.5秒 pyautogui.PAUSE = 0.5
脚本一旦失控、陷入无限循环点击,场面会变得很尴尬。PyAutoGUI提供了一个救命配置:把鼠标快速移到屏幕左上角,程序会立即抛出异常终止,电脑不会被锁死:
# 开启安全故障中断 pyautogui.FAILSAFE = True
confidence 参数取值范围是0到1:
try except,当识别不到按钮时只打印日志,而不是直接中断整个脚本。侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述