简 介:PyAutoGUI是一个Python语言的键鼠自动化库,简单来说和按键精灵的功能一样。但是因为是Python的类库,所以可以使用Python代码配合一些其他类库完成更加强大的功能,本文对PyAutoGUI的一些基本功能做一些介绍。关键词:PyAutoGUI、Python§01 PyAutoGUI功能简介一、基本功能移动鼠标并在其他应用程序的窗口中单击或键入;向应用程序发送keystroke
简 介:PyAutoGUI是一个Python语言的键鼠自动化库,简单来说和按键精灵的功能一样。但是因为是Python的类库,所以可以使用Python代码配合一些其他类库完成更加强大的功能,本文对PyAutoGUI的一些基本功能做一些介绍。关键词
: PyAutoGUI、Python
一、基本功能
- 移动鼠标并在其他应用程序的窗口中单击或键入;
- 向应用程序发送keystrokes(例如,填写表格);
- 截取屏幕截图,并可根据给定的图像(例如,按钮或复选框),在屏幕上找到它;
- 定位应用程序的窗口,并移动、调整大小、最大化、最小化或关闭它(仅限 Windows,目前);
- 在 GUI 自动化脚本运行时显示用于用户交互的消息框。
二、安全设置
就像巫师学徒的魔法扫帚被编程为不断用水填充(然后过度填充)浴缸一样,程序中的错误可能会使其失控。如果鼠标光标自行移动,则很难使用鼠标关闭程序。

▲ 图1 巫师学徒的魔法扫帚与不断用水填充浴缸
作为一项安全功能,默认情况下启用故障安全功能。当调用 PyAutoGUI 函数时,如果鼠标位于主监视器的四个角中的任何一个,它们将引发 pyautogui.FailSafeException
。调用每个 PyAutoGUI 函数后都有十分之一秒的延迟,让用户有时间将鼠标猛击到角落以触发故障安全。
您可以通过设置 pyautogui.FAILSAFE = False
来禁用此故障保护。我强烈建议您不要禁用故障保护。
在 Windows 上,您可以使用 py.exe 程序运行最新版本的 Python:
py -m pip install pyautogui

▲ 图2 安装pyautogui
一、一般功能
1、获取当前鼠标坐标
pyautogui.position()
2、获取当前屏幕分辨率
pyautogui.size()
3、判断坐标(x, y)是否在屏幕内
pyautogui.onScreen(x, y)

▲ 图3.1 一般功能演示结果
二、安全设置
- 在每次 PyAutoGUI 调用后设置 2.5 秒的暂停:
pyautogui.PAUSE = 2.5
- 当故障安全模式为
True
时,将鼠标移动到左上角将引发一个pyautogui.FailSafeException
可以中止您的程序(默认情况下启用FAILSAFE = True
):
pyautogui.FAILSAFE = True
三、鼠标功能
1、移动、拖动鼠标
XY 坐标在屏幕左上角有 0, 0 原点。 X 向右增加,Y 向下增加。如果 duration
为 0 或未指定,则立即移动。注意: 在 Mac 上不能立即拖动。
(1)在 num_second 秒内将鼠标移动到 XY 坐标
pyautogui.moveTo(x, y, duration=num_seconds)
(2)相对于当前位置移动鼠标
pyautogui.move(xOffset, yOffset, duration=num_seconds)
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)
注: 以上两函数功能相同
(3)将鼠标拖到 XY
pyautogui.dragTo(x, y, duration=num_seconds)
(4)相对于其当前位置拖动鼠标
pyautogui.drag(xOffset, yOffset, duration=num_seconds)
pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)
注: 以上两函数功能相同
(5)其他说明
以上四种函数中的x
、y
、xOffset
、yOffset
参数可以取值为None
,此时表示 “当前鼠标光标位置” ,如:
>>> pyautogui.moveTo(100, 200) # 把鼠标移动到(100, 200)处
>>> pyautogui.moveTo(None, 500) # 把鼠标移动到(100, 500)处
>>> pyautogui.moveTo(600, None) # 把鼠标移动到(600, 500)处
>>> pyautogui.move(-30, 0) # 把鼠标向左移动 30 pixels
>>> pyautogui.move(-30, None) # 把鼠标向左移动 30 pixels
(6)补间/缓动功能
补间是一个额外的功能,可以使 鼠标光标开始缓慢移动,然后向目的地加速
或 鼠标光标开始快速移动,但在接近目的地时变慢
。如果您不关心这一点,您可以跳过本节;如果您对此功能感兴趣,可以查看 PyAutoGUI的Tween / Easing功能。
2、点击鼠标
(1)总函数click()
调用 click()
只需在鼠标当前位置用左键单击鼠标一次,但关键字参数可以改变这一点:
pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
button
关键字参数可以是'left'
、'middle'
或'right'
。
■ 如下例:
pyautogui.click(10,10) # 鼠标点击指定位置,默认左键
pyautogui.click(10,10,button='left') # 单击左键
pyautogui.click(1000,300,button='right') # 单击右键
pyautogui.click(1000,300,button='middle') # 单击中间
(2)独立函数
所有的点击都可以用 click() 来完成,但下面这些函数的存在是为了便于阅读。关键字参数是可选的:
pyautogui.rightClick(x=moveToX, y=moveToY)
(右键)
pyautogui.middleClick(x=moveToX, y=moveToY)
(点击滚轮)
pyautogui.doubleClick(x=moveToX, y=moveToY)
(双击)
pyautogui.tripleClick(x=moveToX, y=moveToY)
(三连击)
(3)其他功能
可以单独调用单个按钮按下和释放事件:
pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')
(按下)
pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')
(释放)
3、滚动滚轮
正向滚动将向上滚动,负向滚动将向下滚动:
pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)
■ 如下例:
pyautogui.scroll(300) # 向上滚动300个单位
pyautogui.scroll(-300) # 向下滚动300个单位
四、键盘功能
1、write() 函数
主要的键盘函数是 write()
。此函数将键入传递的字符串中的字符。要在按下每个字符键之间添加延迟间隔,请为 interval
关键字参数传递一个 int
或 float
数据。注意:使用 write()
只能按单字符键,因此不能按 Shift
或 F1
键
>>> pyautogui.write('Hello world!') # 立即打印出"Hello world!"
>>> pyautogui.write('Hello world!', interval=0.25) # 打印出"Hello world!",且每个字符后有四分之一秒的延迟
2、press(), keyDown() 和 keyUp() 函数
-
要解决上述问题,可调用
press()
函数并将pyautogui.KEYBOARD_KEYS
中的字符串传递给它,例如enter
、esc
、f1
。请参阅 KEYBOARD_KEYS。 -
press()
函数实际上只是keyDown()
和keyUp()
函数的包装器,它们模拟按下一个键然后松开它。这些函数可以自己调用。例如,要在按住Shift
键的同时按向左箭头键三次,请调用以下代码:
>>> pyautogui.keyDown('shift') # hold down the shift key
>>> pyautogui.press('left') # press the left arrow key
>>> pyautogui.press('left') # press the left arrow key
>>> pyautogui.press('left') # press the left arrow key
>>> pyautogui.keyUp('shift') # release the shift key
注: ① pyautogui.press('left');
pyautogui.press('left');
pyautogui.press('left')
等价于 pyautogui.press(['left', 'left', 'left'])
或 pyautogui.press('left', presses=3)
;② 要在每次按下之间添加延迟间隔,可以为 interval
关键字参数传递一个 int
或 float
数据。
3、hotkey() 函数
为了方便按下热键或键盘快捷键,可以向 hotkey() 传递几个按键字符串,这些字符串将按顺序按下,然后以相反的顺序释放。下面两段代码是等价的:
代码一:
>>> pyautogui.hotkey('ctrl', 'shift', 'esc')
代码二:
>>> pyautogui.keyDown('ctrl')
>>> pyautogui.keyDown('shift')
>>> pyautogui.keyDown('esc')
>>> pyautogui.keyUp('esc')
>>> pyautogui.keyUp('shift')
>>> pyautogui.keyUp('ctrl')
注: 要在每次按下之间添加延迟间隔,可以为 interval
关键字参数传递一个 int
或 float
数据。
4、KEYBOARD_KEYS
以下是传递给 press()
、keyDown()
、keyUp()
和 hotkey()
函数的有效字符串:
▲ 图4.1 KEYBOARD_KEYS有效字符串
五、消息框功能
如果你需要暂停程序直到用户点击确定,或者想向用户显示一些信息,可以使用消息框功能,消息框函数的名称与 JavaScript 相似。
1、提示框/警告框
pyautogui.alert('This displays some text with an OK button.')

▲ 图5.1.1 pyautogui.alert()效果1

▲ 图5.1.2 pyautogui.alert()效果2
2、选择框
pyautogui.confirm('This displays text and has an OK and Cancel button.')

▲ 图5.2.1 pyautogui.confirm效果1

▲ 图5.2.2 pyautogui.confirm效果2
pyautogui.confirm('选择一项', buttons=['A', 'B', 'C'])

▲ 图5.2.3 pyautogui.confirm效果3
3、普通输入
pyautogui.prompt('This lets the user type in a string and press OK.')

▲ 图5.3.1 pyautogui.prompt效果1

▲ 图5.3.2 pyautogui.prompt效果2
4、密码输入
pyautogui.password('Enter password (text will be hidden)')

▲ 图5.4.1 pyautogui.password效果1

▲ 图5.4.2 pyautogui.password效果2
六、截图功能
我们控制鼠标的操作,不能盲目的进行,所以我们需要监控屏幕上的内容,从而决定要不要进行对应的操作。
1、获取屏幕截图
pyautogui
提供了一个方法 screenshot()
,可以返回一个Pillow
的image
对象,这里有三个常用函数:
(1)im = pyautogui.screenshot()
返回屏幕的截图,是一个Pillow
的image
对象。
(2)im.getpixel((500, 500))
返回im
对象上,(500,500)
这一点像素的颜色,是一个RGB元组。
(3)pixelMatchesColor
pyautogui.pixelMatchesColor(500,500,(12,120,400))
一个对比函数,对比的是屏幕上 (500,500)
这一点像素的颜色,与所给的元素是否相同。
2、识别图像
如果您有想要单击的内容的图像文件,您可以使用 locateOnScreen()
在屏幕上找到它。
# 返回第一次找到图像时的坐标与图像尺寸(left, top, width, height)
>>> pyautogui.locateOnScreen('looksLikeThis.png')
(863, 417, 70, 13)
locateAllOnScreen()
函数将为它在屏幕上找到的所有位置返回一个生成器:
>>> for i in pyautogui.locateAllOnScreen('looksLikeThis.png')
...
...
(863, 117, 70, 13)
(623, 137, 70, 13)
(853, 577, 70, 13)
(883, 617, 70, 13)
(973, 657, 70, 13)
(933, 877, 70, 13)
>>> list(pyautogui.locateAllOnScreen('looksLikeThis.png'))
[(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]
locateCenterOnScreen()
函数只返回图像在屏幕上的中间位置的 XY 坐标:
>>> pyautogui.locateCenterOnScreen('looksLikeThis.png') # returns center x and y
(898, 423)
如果在屏幕上找不到图像,这些函数将返回 None
。
注意:定位功能很慢,可能需要一两秒钟。
相关文章:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2017-11-24 windows服务和进程的区别和联系
2017-11-24 Daemon Process
2017-11-24 C++11中的原子操作(atomic operation)
2013-11-24 MFC消息顺序