这个Python库,专治各种”不服”和”手酸”!
有些软件死活不给API接口,有些网页表单要填几百遍,有些操作需要你像机器人一样重复点击——这些场景是不是让你抓狂?今天要介绍的PyAutoGUI,就是专门对付这类”硬骨头”的。它能让Python脚本接管你的鼠标和键盘,把那些枯燥的重复劳动全部自动化。只要是人能操作的界面,它就能模拟。
装上它,三分钟搞定
安装这玩意儿没什么花头,一行命令:
装好之后,先来个最简单的试试水:
importpyautogui
# 获取屏幕分辨率
width, height = pyautogui.size()
print(f"你的屏幕是 {width} x {height}")
# 获取当前鼠标位置
x, y = pyautogui.position()
print(f"鼠标现在在 ({x}, {y})")
跑一下这段代码,你就能看到自己的屏幕尺寸和鼠标坐标了。这两个信息很重要,后面写自动化脚本时经常要用。
让鼠标听你指挥
鼠标操作是PyAutoGUI的基本功。移动、点击、拖拽、滚动,全都能搞定:
importpyautogui
importtime
# 把鼠标移到屏幕中央,花1秒钟慢慢移过去
pyautogui.moveTo(960, 540, duration=1)
# 在当前位置单击
pyautogui.click()
# 双击
pyautogui.doubleClick()
# 右键点击
pyautogui.rightClick()
# 拖拽:从当前位置拖到(100, 100)的地方
pyautogui.dragTo(100, 100, duration=0.5)

# 滚动:正数向上滚,负数向下滚
pyautogui.scroll(3)
这里有个小技巧:duration参数能让鼠标”慢悠悠”地移动过去,而不是瞬移。这在某些网站或软件中很有用,因为有些程序会检测鼠标移动速度,瞬移可能会被当成异常行为。
温馨提示:坐标(0, 0)在屏幕左上角,x轴向右增大,y轴向下增大。很多人刚开始会搞反y轴的方向,以为往上是正的——不是的,往下才是。
键盘也能模拟
除了鼠标,键盘操作同样不在话下:
importpyautogui
# 输入一串文字(只支持英文和数字)
pyautogui.write('hello world', interval=0.1)
# 按下单个按键
pyautogui.press('enter')
pyautogui.press('f5')
# 组合键,比如Ctrl+C复制
pyautogui.hotkey('ctrl', 'c')
# Ctrl+V粘贴
pyautogui.hotkey('ctrl', 'v')
# 按住shift再按a,输入大写A
pyautogui.hotkey('shift', 'a')
write()函数有个坑——它不支持中文。想输入中文的话,得换个思路:先把中文复制到剪贴板,再用hotkey('ctrl', 'v')粘贴出来。
importpyautogui
importpyperclip # 需要额外安装:pip install pyperclip
# 把中文放进剪贴板
pyperclip.copy('你好世界')
# 粘贴出来
pyautogui.hotkey('ctrl', 'v')
这招百试百灵。
截图和找图:真正的杀手锏
前面讲的都是基础操作,PyAutoGUI真正厉害的地方在于图像识别。
你可以截一张按钮的图,让程序在屏幕上找到这个按钮,然后点击它。这意味着你的脚本不用写死坐标了——按钮跑到哪儿,程序就能跟到哪儿。
importpyautogui
# 截个全屏
screenshot = pyautogui.screenshot()
screenshot.save('screen.png')
# 在屏幕上找某个图片的位置
location = pyautogui.locateOnScreen('button.png')
if location:
print(f"找到了!位置是 {location}")
# 获取图片中心点坐标
center = pyautogui.center(location)
# 点击它
pyautogui.click(center)
else:
print("没找到这个图片")
实际用的时候,一般会这么写,更简洁:
importpyautogui
# 找到图片中心并点击,找不到就返回None
pos = pyautogui.locateCenterOnScreen('button.png', confidence=0.9)
if pos:
pyautogui.click(pos)
这里的confidence参数是匹配精度,0.9表示90%相似就算匹配成功。用这个参数需要先装OpenCV:pip install opencv-python。
温馨提示:截图时要注意屏幕缩放比例。如果你的Windows系统设置了125%或150%的缩放,截出来的图可能对不上。最好把缩放调成100%再截图,或者直接在目标机器上截。
安全机制:别让脚本失控
PyAutoGUI有个保命设计叫Fail-Safe。默认开启的情况下,只要你把鼠标甩到屏幕左上角(0, 0)的位置,程序就会立刻抛出异常并停止。
这个功能太重要了。想象一下,你的脚本出了bug,疯狂乱点,你却关不掉它——那场面简直是灾难。有了Fail-Safe,甩一下鼠标就能紧急刹车。
importpyautogui
# 确认Fail-Safe是开着的(默认就是True)
print(pyautogui.FAILSAFE) # True

# 千万别这么干,除非你知道自己在做什么
# pyautogui.FAILSAFE = False
另外一个好习惯是在脚本开头加点延迟,给自己留个反应时间:
importpyautogui
importtime
# 等3秒再开始,方便你切换到目标窗口
time.sleep(3)
# 后面是你的自动化代码...
一个实战小例子
来个完整的例子,自动打开记事本并输入一段文字:
importpyautogui
importtime
# 等待3秒
time.sleep(3)
# 按Win键打开开始菜单
pyautogui.press('win')
time.sleep(0.5)
# 输入notepad
pyautogui.write('notepad', interval=0.05)
time.sleep(0.3)
# 回车打开
pyautogui.press('enter')
time.sleep(1)
# 输入内容(用剪贴板方式输入中文)
importpyperclip
pyperclip.copy('PyAutoGUI真好用!')
pyautogui.hotkey('ctrl', 'v')
这段代码在Windows上能跑通。你会看到电脑自己打开了记事本,还输入了一行中文。挺有意思的对吧?
PyAutoGUI的本质是”像素级”的自动化,它不懂程序内部的逻辑,只会傻乎乎地找图、点击、输入。这既是它的优点——什么软件都能对付,也是它的缺点——界面稍微变一下就可能翻车。拿它来处理日常的重复性小任务没问题,但别指望它能搞定那些需要高稳定性的生产环境任务。选对工具,才能事半功倍。