python 第三方库 PyAutoGUI 详解

First Post:

Last Update:

Word Count:
2k

Read Time:
7 min

python 第三方库 PyAutoGUI详解

简介

PyAutoGUI 是一个用于自动化鼠标和键盘操作的Python库。用于编写Python脚本来模拟用户的输入和操作,以自动化重复性任务或进行自动化测试。以下是PyAutoGUI的一些主要功能和用途:

  1. 模拟鼠标操作:PyAutoGUI可以模拟鼠标的移动、点击、拖动等操作。可以指定鼠标操作的坐标位置。

  2. 模拟键盘操作:可以模拟键盘按键,包括单个按键、组合键和输入文本。

  3. 屏幕截图:捕获屏幕上的特定区域的截图,并保存为图像文件。

  4. 等待条件:可以等待屏幕上的特定图像或颜色出现,然后执行后续操作。

  5. 自定义延迟:可以设置操作的延迟时间,以便模拟人类的操作速度。

  6. 自动化测试:可用于创建自动化测试脚本,测试应用程序的用户界面。

  7. 跨平台:可以在多个操作系统上运行,包括Windows、macOS和Linux。

具体介绍

PyAutoGUI的安装

1
pip install pyautogui

PyAutoGUI中鼠标控制相关函数的使用

PyAutoGUI中的坐标

image-20230915123219163

PyAutoGUI中的坐标系以屏幕左上角为坐标原点,水平向右为x轴正向,竖直向下为y轴正向。

函数介绍

pyautogui.size()

返回一个元组(x, y),对应值分别为屏幕的宽和高。

pyautogui.position()

返回一个元组(x, y),为当前鼠标指针所在的屏幕坐标。

pyautogui.onScreen(x, y)

返回一个布尔值,如果(x, y)点在屏幕上返回True, 否则返回False

example 1
1
2
3
4
5
6
7
8
9
10
11
# example1
import pyautogui
def example1():
print("Get the size of the screen: ", pyautogui.size())
print("Get the position of the mouse: ", pyautogui.position())
print("Is (334, 0) on the screen? ", pyautogui.onScreen(334, 0))

# output:
# Get the size of the screen: Size(width=1920, height=1080)
# Get the position of the mouse: Point(x=381, y=595)
# Is (334, 0) on the screen? True
pyautogui.moveTo(x, y, duration)

将鼠标在duration时间内移动到(x, y)处。

  • (x, y)为相对于屏幕的绝对坐标,其中一个可设置为None,含义为该轴坐标不变。

  • duration为可选参数,用于设置鼠标移动这一事件发生的时长,默认情况下如果duration参数设置为小于0.1那么这个移动时间就会即时完成。

pyautogui.move(x, y, duration)
pyautogui.moveRel(x, y, duration)

两个函数作用一致,都是将鼠标移动到相对当前位置坐标为(x, y)处,查看源码发现如下代码:

image-20230915143924687

因此两函数完全一致。

  • (x, y)为相对于鼠标当前位置的目标点坐标, 其中一个可设置为None,含义为该轴坐标不变。
  • duration参数含义与moveTo函数相同。
pyautogui.dragTo(x, y, duration, button)

模拟鼠标按键button按下后移动鼠标,在duration时间内移动到(x, y)点。

  • (x, y)为对于屏幕的绝对坐标,其中一个可设置为None,含义为该轴坐标不变。
  • duration参数含义与moveTo函数相同。
  • button参数为可选值,可以为'left''middle''right',含义分别为鼠标左中右键,默认为'left'
pyautogui.drag(x, y, duration, button)
pyautogui.dragRel(x, y, duration, button)

模拟鼠标按键button按下后移动鼠标,在duration时间内移动到相对当前位置坐标为(x, y)点。

同样在源码中找到image-20230915144822717

因此两函数也完全一致。

  • (x, y)为对于屏幕的绝对坐标,其中一个可设置为None,含义为该轴坐标不变。
  • duration参数含义与moveTo函数相同。
  • button参数含义与dragTo函数相同。
pyautogui.click(button, x, y, clicks, interval)

(x, y)位置处用button键单击clicks次,单击之间的间隔为interval秒。

  • 所有参数为可选值,默认为鼠标左键在当前位置处单击一次。
  • buttondrag函数含义相同
  • (x, y)为鼠标点击位置的绝对坐标。
  • clicks为点击次数。
  • interval为多次点击之间的时间间隔,单位为秒。

类似函数有pyautogui.doubleClick()pyautogui.tripleClick()等等。

pyautogui.mouseDown(x, y, button)
pyautogui.mouseUp(x, y, button)

鼠标按下和鼠标松开函数,参数中(x, y)为绝对坐标,button与上述函数含义相同。

pyautogui.scroll(clicks)

鼠标滚轮滚动clicks像素,clicks为正时页面向顶部滚动,为负时页面向底部滚动。

PyAutoGUI中键盘控制相关函数的使用

函数介绍

pyautogui.write(content, interval)

模拟键盘输入的函数,其中content为输入内容,只能为英文,interval为输入时每个键入内容之间的间隔时间,单位为秒,为可选参数。

pyautogui.press(key)
pyautogui.keyDown(key)
pyautogui.keyUp(key)

以上三个函数分别为敲击键盘按键,按下键盘按键以及释放键盘按键,

此处看其中参数key的可选值。

如果要连续敲击多个键可以将这些按键以列表形式传入press()函数如下:

1
pyautogui.press(['left', 'left', 'left'])

同样可以指定interval参数来指定按键之间的时间间隔。

pyautogui.hold(key)

按下key键并不松开,其用法如下:

1
2
with pyautogui.hold('shift'):
pyautogui.press(['left', 'left', 'left'])

即在按下”shift”键的同时按方向左键三次。

该代码与下面的代码等效:

1
2
3
4
5
pyautogui.keyDown('shift')
pyautogui.press('left')
pyautogui.press('left')
pyautogui.press('left')
pyautogui.keyUp('shift')
hotkey(keys)

该函数接收的参数为一个键值列表,功能为以从前到后的顺序依次按下列表中的键,再以从后往前的顺序依次释放。

示例如下:

1
pyautogui.hotkey('ctrl', 'shift', 'esc')

下面的代码与上面的等效:

1
2
3
4
5
6
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')

同样可以指定interval参数来指定每一次按键的时间间隔。

PyAutoGUI中消息对话框相关函数使用

函数介绍

pyautogui.alert(text='', title='', button='OK')

该函数会弹出一个对话框,文本内容为text,标题为title,只有一个按钮,默认文本为"OK",返回单击按钮的文本。

example 2
1
2
3
pyautogui.alert(text="This is an alert box.",
title="Alert Box",
button="OK")

结果:image-20230915153349387

pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel'])

显示一个消息框,其中包含“确定”和“取消”按钮。按钮的数量和文本可以自定义。返回单击的按钮的文本。

example 3
1
2
3
pyautogui.confirm(text="This is a confirm box.",
title="Confirm Box",
buttons=["OK", "Cancel"])

结果:image-20230915153812892

pyautogui.prompt(text='', title='', default='')

显示一个包含文本输入以及“确定”和“取消”按钮的消息框。点击确定则返回输入的文本,如果单击“取消”,则返回None

example 4
1
2
3
pyautogui.prompt(text="This is a prompt box.",
title="Prompt Box",
default="This is the default text.")

结果:image-20230915154045258

pyautogui.password(text='', title='', default='')

显示一个包含文本输入以及“确定”和“取消”按钮的消息框。键入的字符显示为 *.若点击确定则返回输入的文本,如果单击“取消”,则返回None

example 5
1
2
3
pyautogui.password(text="This is a password box.",
title="Password Box",
default="This is the default text.")

结果:image-20230915154401077

PyAutoGUI中截图相关函数使用

函数介绍

pyautogui.screenshot(filename=str, region)

该函数会截取屏幕并返回一个PIL图片对象,默认情况下会截取整个屏幕,可以指定region参数来截取屏幕上的指定位置,region为一个四元组(x, y, w, h),含义为你想截取的屏幕区域左上角的坐标以及它的宽和高。

当你传入一个字符串作为文件名时,它将会保存该截图为你指定的文件名。

pyautogui.locateOnScreen(filename, grayscale=False)

该函数用于在屏幕上匹配你传入的图片文件,若屏幕上有区域能与传入的图片匹配,会返回一个四元组(x, y, w, h),为匹配区域的坐标信息,否则会引发ImageNotFoundException

grayscale为灰度匹配,若设为True匹配速度会有提升,但精度会下降。

pyautogui.locateCenterOnScreen(filename, grayscale=False)

作用与pyautogui.locateOnScreen(filename)相同,不过返回值为匹配区域的中心坐标。