Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
本文详细介绍Python中PyAutoGUI模块的安装方法及核心功能,涵盖鼠标移动、点击、拖拽、滚轮操作及键盘输入。通过代码示例演示如何获取屏幕分辨率、实现自动化点击与拖拽,并利用截图定位功能处理动态按钮,同时提供防失控的安全机制设置。
本文通过具体实例解析Python中PyAutoGUI模块在控制鼠标和键盘以实现自动化任务中的应用,供读者参考学习。
PyAutoGUI是Python语言中用于控制鼠标和键盘操作的第三方模块。
借助该模块,用户可以轻松实现各类自动化任务,从而摆脱重复性、枯燥的手工操作。
PyAutoGUI模块主要具备以下功能:
- 控制鼠标移动、左右键点击及滚轮滚动。
- 模拟发送虚拟按键。
# 安装pyautogui
该模块兼容Windows、Mac OS X以及Linux操作系统。
根据具体使用的操作系统不同,可能需要预先安装某些依赖库。
对于Linux系统(Debian系列):
$ sudo apt-get install python3-pip $ sudo pip3 install python3-xlib $ sudo apt-get install scrot $ sudo apt-get install python3-tk $ and sudo apt-get install python3-dev
Scrot是PyAutoGUI用于截图的工具。
Mac OS X:
$ sudo pip3 install pyobjc-framework-Quartz $ sudo pip3 install pyobjc-core $ sudo pip3 install pyobjc $ sudo pip3 install pillow
Mac OS X上的Python3可通过Homebrew或MacPorts进行安装。
Windows系统无需额外安装依赖。
在确保依赖安装完成后,执行以下命令安装pyautogui:
$ sudo pip3 install pyautogui # Windows pip install pyautogui
导入模块进行基础测试:
import pyautogui
# 准备
Python控制鼠标和键盘的速度极快,这可能导致其他应用程序出现异常。如果程序失控且鼠标指针不断乱晃,用户将难以通过常规方式点击窗口退出程序。
针对上述情况,有两种解决方法:
#1 pyautogui的暂停和Fail-Safe(故障安全)机制
你可以在Python脚本中设置每个函数执行后暂停数秒,从而为自己争取几秒钟的控制权。
import pyautogui pyautogui.PAUSE = 1.5
Fail-Safe机制:当鼠标快速移动到屏幕左上角时,会触发PyAutoGUI的FailSafeException异常。你可以使用try-except语句捕获该异常,或者允许脚本直接异常退出。若希望终止程序,只需快速将鼠标移动至屏幕左上角即可。
import pyautogui pyautogui.FAILSAFE = True
#2 注销系统
此方法较为粗暴,通常不建议使用。Windows和Linux系统的注销快捷键为Ctrl–Alt–Del;Mac OS X系统的注销快捷键为Command–Shift–Option-Q。
# 移动鼠标
PyAutoGUI采用x、y坐标系统,屏幕左上角的坐标为(0, 0)。
以1366×768分辨率为例:

使用pyautogui.size()函数获取屏幕分辨率:
import pyautogui pyautogui.size() # (1366, 768) width, height = pyautogui.size()
获取屏幕分辨率后,接下来我们控制鼠标移动。
使用moveTo函数进行绝对坐标移动。(block.py):
import pyautogui for i in range(10): pyautogui.moveTo(300, 300, duration=0.25) pyautogui.moveTo(400, 300, duration=0.25) pyautogui.moveTo(400, 400, duration=0.25) pyautogui.moveTo(300, 400, duration=0.25)
执行结果:
$ python3 block.py
上述代码使鼠标顺时针移动,并绘制10次方框。
绘制圆形:
import pyautogui import math width, height = pyautogui.size() r = 250 # 圆的半径 # 圆心 o_x = width/2 o_y = height/2 pi = 3.1415926 for i in range(10): # 转10圈 for angle in range(0, 360, 5): # 利用圆的参数方程 X = o_x + r * math.sin(angle*pi/180) Y = o_y + r * math.cos(angle*pi/180) pyautogui.moveTo(X, Y, duration=0.1)
使用moveRel()函数进行相对坐标移动,以当前鼠标位置为基点:
import pyautogui for i in range(10): pyautogui.moveRel(100, 0, duration=0.25) pyautogui.moveRel(0, 100, duration=0.25) pyautogui.moveRel(-100, 0, duration=0.25) pyautogui.moveRel(0, -100, duration=0.25)
获取鼠标当前坐标:
import pyautogui x, y = pyautogui.position()
实时获取鼠标位置坐标:
import pyautogui
try:
while True:
x, y = pyautogui.position()
print(x,y)
except KeyboardInterrupt:
print('\nExit.')
# 鼠标点击、拖拽和滚轮
鼠标点击操作
使用click()函数发送虚拟鼠标点击,默认情况下在鼠标当前位置执行左键点击。函数原型如下:
pyautogui.click(x=cur_x, y=cur_y, button='left')
- x、y参数指定点击位置,默认为鼠标当前坐标。
- button参数指定点击的按键,可选值包括‘left'、‘middle'、‘right'。
在当前位置执行右键点击:
import pyautogui pyautogui.click(button='right')
在指定位置执行左键点击:
import pyautogui pyautogui.click(100, 100)
click函数完成一次鼠标点击。一次完整的点击包含按下mouseDown()和弹起mouseUp()两个动作。上述两个函数的参数与click函数相同,实际上click函数只是对mouseDown()和mouseUp()函数的简单封装。
其他相关函数:
- pyautogui.doubleClick():鼠标双击,即执行两次click()函数。
- pyautogui.rightClick():右键点击。
- pyautogui.middleClick():中键点击。
鼠标拖拽操作
拖拽指按下鼠标键并拖动鼠标。PyAutoGUI提供了两个函数:dragTo()和dragRel()。其参数与moveTo()和moveRel()一致。
注意:duration参数设置的时间不宜过短,拖动速度过快可能导致部分系统无法响应。
利用该功能,你可以在简单的画图程序中绘制复杂图形。

滚轮操作
使用函数scroll(),该函数仅接受一个整数参数。值为正数表示向上滚动,值为负数表示向下滚动。
pyautogui.scroll(200)
# 定位某个按钮的位置
PyAutoGUI具备截屏功能。读者可能会疑惑,为何该模块还包含截屏功能?
假设你需要每隔10秒点击一次按钮,利用前述函数可轻松实现。但如果每次点击后按钮位置随机变化,该如何处理?下面我们将解决这个问题。
首先了解如何使用pyautogui进行截屏:
import pyautogui im = pyautogui.screenshot() # 获得某个坐标的像素 im.getpixel((50, 200)) # (30, 132, 153) # 判断屏幕坐标的像素是不是等于某个值 pyautogui.pixelMatchesColor(50, 200, (30, 132, 153)) # True
小测试:实时获取鼠标所在位置的像素值。
现在解决前述问题。关键在于如何找到按钮所在的坐标。方法很简单:首先对目标按钮进行截屏,保存为button.png。然后使用locateOnScreen函数查找按钮位置:
import pyautogui
pyautogui.locateOnScreen('button.png')
# (643, 745, 70, 29)
locateOnScreen函数主要进行颜色对比,若有一个像素不匹配则返回None。该函数返回匹配图形的坐标,通过计算可得中心点:
x, y = pyautogui.center((643, 745, 70, 29)) # 获得中心点 pyautogui.click(x, y)
locateAllOnScreen():查找所有匹配的位置坐标。
# 键盘按键
前述内容涉及鼠标操作,接下来介绍键盘控制。
输入字符串
pyautogui.typewrite():
import pyautogui
pyautogui.click(100, 100)
pyautogui.typewrite('Hello world!')

上述字符串为一次性输入,为演示效果可设置输入延迟:
typewrite('Hello world!', 0.25)
PyAutoGUI输入单个字符较为简便,但如何处理特殊字符?例如在输入Hello World后换行继续输入。
PyAutoGUI键盘按键表:
| ‘enter' (或‘return' 或 ‘\n') | 回车 |
| ‘esc' | ESC键 |
| ‘shiftleft', ‘shiftright' | 左右SHIFT键 |
| ‘altleft', ‘altright' | 左右ALT键 |
| ‘ctrlleft', ‘ctrlright' | 左右CTRL键 |
| ‘tab' (‘\t') | TAB键 |
| ‘backspace', ‘delete' | BACKSPACE 、DELETE键 |
| ‘pageup', ‘pagedown' | PAGE UP 和 PAGE DOWN键 |
| ‘home', ‘end' | HOME 和 END键 |
| ‘up', ‘down', ‘left', ‘right' | 箭头键 |
| ‘f1', ‘f2', ‘f3'…. | F1…….F12键 |
| ‘volumemute', ‘volumedown', ‘volumeup' | 有些键盘没有 |
| ‘pause' | PAUSE键 |
| ‘capslock', ‘numlock', ‘scrolllock' | CAPS LOCK, NUM LOCK, 和 SCROLL LOCK 键 |
| ‘insert' | INS或INSERT键 |
| ‘printscreen' | PRTSC 或 PRINT SCREEN键 |
| ‘winleft', ‘winright' | Win键 |
| ‘command' | Mac OS X command键 |
import pyautogui
pyautogui.click(100, 100)
pyautogui.typewrite('Hello world!', 0.25)
pyautogui.typewrite(['enter', 'a', 'b', 'left', 'left', 'X', 'Y'], '0.25')

按键的按下和释放操作
与鼠标按键操作类似。
- keyDown():按下某个键。
- keyUp():松开某个键。
- press():完成一次完整击键,是前述两个函数的组合。
执行alt+F4:
pyautogui.keyDown('altleft');
pyautogui.press('f4');
pyautogui.keyUp('altleft')
也可直接使用热键函数:
pyautogui.hotkey('altleft', 'f4')
关于PyAutoGUI的介绍至此结束。如果你使用该模块编写了有趣的自动化脚本,欢迎留言分享。
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述内容对大家学习Python程序设计有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













