速查表

参考:quickstart

这是一个关于使用 PyAutoGUI 的快速入门引用。PyAutoGUI 是跨平台的 GUI 自动化模块,可以在 Python 2 和 3 上工作。您可以控制鼠标和键盘,以及执行基本的图像识别来自动化您的计算机上的任务。

本页示例中的所有关键字参数都是可选的。

import pyautogui

通用函数

>>> pyautogui.position()  # 当前鼠标x和y
(968, 56)
>>> pyautogui.size()  # 当前屏幕分辨率的宽度和高度
(1920, 1080)
>>> pyautogui.onScreen(x, y)  # 如果x和y在屏幕内,则为True。
True

失效保护

在每次 PyAutoGUI 调用后设置一个 2.5 秒的暂停:

import pyautogui
pyautogui.PAUSE = 2.5

当故障安全模式为 True 时,将鼠标移动到左上角将引发 pyautogui.FailSafeException 可以中止程序的:

import pyautogui
pyautogui.FAILSAFE = True

鼠标函数

XY 坐标在屏幕的左上角以 \(0,0\) 为原点。X 向右增加,Y 向下增加。

# 将鼠标移动到XY坐标上的num_second秒
pyautogui.moveTo(x, y, duration=num_seconds) 
# 相对于当前位置移动鼠标
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

如果 duration 为 0 或未指定,则立即移动。注意:在 Mac 上拖拽不能立即完成。

# 拖动鼠标到XY
pyautogui.dragTo(x, y, duration=num_seconds)
# 相对于当前位置拖动鼠标
pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)

调用 click() 只是用鼠标当前位置的左键点击鼠标一次,但关键字参数可以改变这一点:

pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')

button 关键字参数可以是'left''middle',或 'right'

所有的单击都可以用 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)

正滚动将向上滚动,负滚动将向下滚动:

pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)

单个按钮向下和向上事件可以分别调用:

pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')
pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')

键盘函数

在调用函数时,按下的键会转到键盘光标所在的位置。

# 对于输入文本,换行符是 Enter
pyautogui.typewrite('Hello world!\n', interval=secs_between_keys)

也可以传递一个键名列表

pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys)

键名的完整列表在 pyautogui.KEYBOARD_KEYS 中。

像 Ctrl-S 或 Ctrl-Shift-1 这样的键盘热键可以通过向 hotkey() 传递一个键名列表来实现:

# ctrl-c 复制
pyautogui.hotkey('ctrl', 'c')
# ctrl-v 粘贴
pyautogui.hotkey('ctrl', 'v')

单个按钮向下和向上事件可以分别调用:

pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)

信息框函数

如果你需要暂停程序,直到用户单击 OK,或者想向用户显示一些信息,消息框函数有类似于 JavaScript 的名称:

>>> pyautogui.alert('This displays some text with an OK button.')
>>> pyautogui.confirm('This displays text and has an OK and Cancel button.')
'OK'
>>> pyautogui.prompt('This lets the user type in a string and press OK.')
'This is what I typed in.'

如果用户单击 Cancel, prompt()函数将返回 None

截图函数

PyAutoGUI 使用 Pillow/PIL 来处理与图像相关的数据。

在 Linux 上,必须运行 sudo apt-get install scrot 来使用截图特性。

>>> pyautogui.screenshot()  # returns a Pillow/PIL Image object
<PIL.Image.Image image mode=RGB size=1920x1080 at 0x24C3EF0>
>>> pyautogui.screenshot('foo.png')  # returns a Pillow/PIL Image object, and saves it to a file
<PIL.Image.Image image mode=RGB size=1920x1080 at 0x31AA198>

如果你有一个想要点击的图像文件,你可以通过 locateOnScreen() 在屏幕上找到它。

>>> 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

注解

定位功能很慢,可能需要一到两秒。