Python pyautogui Library | 使用自动化测试
当我们多次做同样的工作时,我们会感到厌倦。我们总是寻找能够解决这种问题的方法。所以有一个解决方案出现在我们面前:我们可以创建一个能够通过单击完成这种任务的东西。
自动化在我们的生活中扮演着重要的角色,它允许我们在处理过程中完成更多任务。
Python提供了许多有用而先进的库,使得Python程序员的生活更加轻松。pyautogui库是其中一个广泛的有用方法集合。在本教程中,我们将学习pyautogui库,并通过使用其功能将其实现到代码中。所以,不再拖延,让我们简要介绍pyautogui库。
什么是pyautogui库
Python pyautogui库是一个自动化库,允许控制鼠标和键盘。或者我们可以说,它帮助我们使用Python脚本自动移动鼠标和键盘与其他应用程序进行交互。它提供了许多功能,以下是一些示例。
- 我们可以在其他应用程序的窗口中移动鼠标并点击。
- 我们可以向其他应用程序发送按键。例如-填写表单,输入搜索查询到浏览器等。
- 我们还可以进行快照并提供图像。
- 它允许我们定位应用程序的窗口,并移动、最大化、最小化、调整大小或关闭它。
- 显示警报和消息框。
安装pyautogui库
Windows操作系统
这是第三方库,所以我们需要在使用之前安装它。我们可以使用pip命令安装它。你可以创建一个虚拟环境或者全局安装。打开命令提示符,输入以下命令。
pip install pyautogui
Mac操作系统
pip3 install pyobjc-core
pip3 install pyobjc
pip3 install pyautogui
Linux操作系统
pip3 install python3-xlib
pip3 install pyautogui
安装完成后,我们可以开始探索其属性。
Pyautogui基本功能
在本节中,我们将介绍pyautogui库的一些基本函数。首先,创建一个新文件并导入pyautogui库。
import pyautogui
- size() 方法 – 它返回主显示器的大小。让我们来看下面的示例。
示例
import pyautogui
screenWidth, screenHeight = pyautogui.size() # returns the monitor size
print("The Screen Width is: ", screenWidth)
print("The Screen Height is: ", screenHeight)
输出:
The Screen Width is: 1366
The Screen Height is: 768
- position()方法 – 它返回鼠标的XY坐标。让我们来看下面的示例。
示例
currentMouseX, currentMouseY = pyautogui.position()
print("X Cordinate is: ", currentMouseX)
print("Y Cordinate is: ", currentMouseY)
输出:
X Cordinate is: 839
Y Cordinate is: 635
- onscreen() 方法 – 此方法返回布尔值,判断坐标为 x 和 y 的点是否在屏幕上。让我们看下面的示例。
示例
print(pyautogui.onScreen(500, 600))
print(pyautogui.onScreen(0, 1500))
输出:
True
False
我们提供了超出屏幕尺寸的0到1500,所以返回了False。
基本鼠标功能
本节将介绍如何使用pyautogui库自动化鼠标。下面是一些常用的鼠标操作方法,如将光标从一个点移动到另一个点并自动点击按钮。让我们看看以下方法。
moveTo()方法 –
它将鼠标移动到XY坐标。它接受三个参数 – X坐标,Y坐标和持续时间(以给定的时间单位设置持续时间)。
pyautogui.moveTo(100, 150, duration = 10)
光标根据给定的时间持续时间移动到指定的坐标位置。持续时间是以秒为单位。我们传递了十秒钟,意味着光标将花费十秒钟来定位到指定的坐标位置。
当使用此方法时,可能会遇到以下错误。
注意 – 可能的错误
Traceback (most recent call last):
File "gui.py", line 23, in
File "D:\PythonWithKafka\new\lib\site-packages\pyautogui\__init__.py", line 598, in wrapper
returnVal = wrappedFunction(*args, **kwargs)
File "D:\PythonWithKafka\new\lib\site-packages\pyautogui\__init__.py", line 1283, in moveTo
_mouseMoveDrag("move", x, y, 0, 0, duration, tween)
File "D:\PythonWithKafka\new\lib\site-packages\pyautogui\__init__.py", line 1509, in _mouseMoveDrag
File "D:\PythonWithKafka\new\lib\site-packages\pyautogui\__init__.py", line 1722, in failSafeCheck
raise FailSafeException(
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.
如果发生此类错误,意味着您的计算机的安全模式已启用。为了克服这个错误,我们需要禁用安全模式。所以请在您的代码开头添加以下行。
pyautogui.FAILSAFE=False
moveRel()函数
moveRel()函数允许我们将鼠标相对于当前鼠标位置进行移动。假设鼠标位于屏幕上的(100, 100)位置,并且我们调用moveRel()函数并使用参数(100, 100, 3),新的位置将变为(300, 300)。
pyautogui.moveRel(100, 100, 3)
上述行代码将使光标在3秒内向右移动100个点,然后向左移动100个点。
click()函数
click()方法与鼠标的点击按钮功能相同。下面是click()方法的语法。语法如下所示。
pyautogui.click(x, y, clicks, interval, button)
参数 –
- x – 这是要到达的点的x坐标。
- y – 这是要到达的点的y坐标。
- clicks – 这表示当光标移动到屏幕上时的点击次数。
- Interval – 这定义了每次鼠标点击之间的时间间隔。
- button – 这指定了光标到达屏幕上某个点时要按下的按钮。我们可以传递右键、左键和中键的值。
我们可以按以下方式使用它。
pyautogui.click(100, 100, 5, 2, 'right')
以下函数也可用于移动鼠标。
pyautogui.rightClick(x, y)
pyautogui.doubleClick(x, y)
pyautogui.tripleClick(x, y)
pyautogui.middleClick(x, y)
这个库还允许我们通过指定何时按下鼠标和何时释放它来更多地控制鼠标点击。mouseDown和mouseUp方法帮助我们实现这一点。
以下是示例。
示例
x = 100
y = 100
# These methods are equivalent to the click(x,y)
pyautogui.mouseDown(x=x, y=y, button='left')
pyautogui.mouseUp(x=x, y=y, button='left')
scroll() 函数
scroll() 是其中一个最重要的函数,如其名所示,它用于在上下方向上滚动。下面是它的语法。
语法 –
pyautogui.scroll(amount_to_scroll, x =x_movement, y=y_movement)
正值用于定义 amount_to_scroll 参数向上滚动,要向下滚动,我们需要指定一个负值。以下是示例。
pyautogui.scroll(100, 200, 120)
所以,我们已经讨论了几乎所有控制鼠标的功能。使用这些方法,我们可以执行与物理鼠标相同的任何操作。在下一部分中,我们将讨论如何使用各种功能来控制键盘。有许多可用的功能,但我们将讨论一些重要的功能。
常见的键盘操作
pyautogui库提供了使用Python脚本按键的功能。让我们运行以下代码以检查可用的按键。
pyautogui.KEYBOARD_KEYS
输出:
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
typewrite() 函数
typewrite() 函数用于在文本字段中写入内容。语法如下。
语法 –
pyautogui.typewrite(text, interval)
text参数是提供的文本,interval参数是每个按键之间的时间间隔,单位为秒。以下为示例。
示例
pyautogui.typewrite('Sachin Kumar', 2)
Sachin Kumar将被写入文本字段,并在每次按键之间暂停2秒。
我们可以传递要按下的按键序列。为此,我们可以使用以下代码。
pyautogui.typewrite(['S', 'a', 'c', 'h', 'i', 'n', 'z', 'backspace', 'enter'])
以上代码将输入”Sachin”,然后删除末尾的”e”。
hotkey()函数
大部分情况下,我们使用键盘上的组合键执行特定任务,比如按下Ctrl + C复制文本。但是我们不能将[‘Ctrl’ + C]作为参数传递给typewrite()函数。虽然它可以按照顺序依次按下按钮,但不能像我们按住Ctrl键然后按C键一样同时按下键盘来复制内容。为了实现这一点,我们使用hotkey()函数来同时按下两个或多个键。让我们看一个示例。
示例 –
pyautogui.hotkey('shift', 'enter')
pyautogui.hotkey('ctrl', '2' ) # For the @ symbol
pyautogui.hotkey('ctrl', 'c') # To copy
screenshot()函数
截图(screenshot())函数用于在任意时刻对屏幕进行截图。以下是其语法。
语法 –
pyautogui.hotkey()
它将在一个变量中存储一个包含图像的 PIL 对象。我们也可以按照下面的方式将截图存储在指定的路径上。
pyautogui.screenshot(your_path/file_name.png)
消息框函数
这些函数用于暂停/延迟程序,直到用户点击确认或其他操作,并用于向用户显示消息。
alert()函数
用于显示带有文本消息和确认按钮的消息框。让我们看看以下示例。
示例
import pyautogui
pyautogui.alert(text='Hello I am a message box', title='JavaTpoint', button='OK')
输出:
当我们点击”确认”按钮时,它会返回按钮的文本。
'OK'
confirm() 函数
此方法用于显示多个选项,或者我们可以说是OK和Cancel按钮。数字和文本可以自定义。它返回点击的按钮的文本。让我们看下面的示例。
示例
pyautogui.confirm(text='Hello I am a message box', title='JavaTpoint', buttons=['OK', 'Cancel'])
输出:
'Cancel'
我们也可以根据需要添加更多的按钮。我们只需要将它传递到按钮列表中即可。
'Not Sure'
prompt()函数
它用于显示带有文本输入框、确定按钮和取消按钮的消息框,并返回输入的文本。让我们看看以下示例。
示例
import pyautogui
pyautogui.password(text='Please Enter Your First Name', title='', default='', mask='*')
输出:
警示(alert()) 函数
正如其名称所示,它用于在屏幕上显示一个警示消息。让我们看看以下示例。
示例
import pyautogui
pyautogui.alert('To Continue, Click OK to continue')
输出:
password()函数
它显示带有文本输入框的消息框,并将键入的字符显示为*。让我们看下面的示例。
示例
import pyautogui
pyautogui.password('Enter password (text will be hidden)')
输出:
一些Pyautogui库的示例
示例1: 在下面的代码中,我们使用pyautogui库自动打开了Chrome浏览器。复制下面的代码并在您的IDE中运行。
代码 –
import pyautopyautogui, time
def crometest():
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(0,screenHeight)
pyautogui.click()
pyautogui.typewrite('Chrome', interval=0.25)
pyautogui.press('enter')
time.sleep(2)
pyautogui.keyDown('alt')
pyautogui.press(' ')
pyautogui.press('x')
pyautogui.keyUp('alt')
pyautogui.click(250,22)
pyautogui.click(371,51)
pyautogui.typewrite('https://javatpoint.com/python-tutorial')
pyautogui.press('enter')
def identifyloc():
while True:
currentMouseX, currentMouseY = pyautogui.position()
print(currentMouseX,currentMouseY)
time.sleep(3)
crometest()
示例2:
import pyautogui as gui
import time
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw()
filename = askopenfilename()
# It prints the filename that to be opened
print(filename)
timeDelay = int(input("Enter the number of seconds for the delay to open the file : ").split()[0])
# In case the input time is designed to break the delay function, we can reset the timeDelay back to 1.
if timeDelay < 1:
timeDelay = 1
time.sleep(5)
f = open(filename, "r")
# To read the each charater of file and type them
for w in f:
time.sleep(timeDelay)
gui.typewrite(w)
gui.press("enter")
执行上面的代码时,它会打开一个窗口,我们可以在其中选择要打开的任何文件。最后,我们选择文件,终端会打印出所选文件的名称,并在给定的秒数后打开它。
结论
在本教程中,我们介绍了pyautogui库及其重要方法。这些方法可以帮助我们在Python中创建自动化。我们还讨论了它在不同操作系统中的安装方式。您可以使用此库来自动化您的常规任务。