PyAutoGUI操作指南
PyAutoGUI是一个纯Python的GUI自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。
作为安全功能,默认情况下启用故障保护功能。当调用PyAutoGUI函数时,如果鼠标位于主监视器的四个角中的任何一个,它们将引发PyAutoGUI.FailSafeException。在调用每个PyAutoGUI函数后,会有十分之一秒的延迟,以便用户有时间将鼠标猛击到角落以触发故障保险。
# 来禁用此故障保护 但是不建议 pyautogui.FAILSAFE = False # 10秒延迟由 pyautogui.PAUSE 设置,默认为0.1。您可以更改此值。 # pyautogui.DARWIN_CATCH_UP_TIME 设置在macOS上添加额外延迟在键盘和鼠标事件之后,因为在PyAutoGUI发出这些事件之后,操作系统似乎需要延迟。默认设置为0.01,增加额外的百分之一秒延迟。
1 安装
pip install pyautogui
2 PyAutoGUI的快速入门参考
PyAutoGUI是在Python运行的跨平台GUI自动化模块,可以控制鼠标和键盘以及执行基本图像识别,以自动化计算机上的任务。
2.1 基本功能
import pyautogui import pyautogui a = pyautogui.position() print("鼠标的当前位置:",a) screen_width_height = pyautogui.size() print("屏幕的当前尺度:",screen_width_height) x = 500 y = 700 flag = pyautogui.onScreen(x,y) print("判断当前坐标是否在屏幕中:",flag)
2.2 关闭安全功能
import pyautogui # 在每次PyAutoGUI调用后设置2.5秒暂停: pyautogui.PAUSE = 2.5 # 当故障保护模式为True时,将鼠标移到左上方将显示 pyautogui.FailSafeException: pyautogui.FAILSAFE = True
2.3 鼠标功能
X,Y坐标在屏幕左上角为(0,0)原点。X向右增加,Y向下增加。
2.3.1 将鼠标移动到绝对位置(x,y)位置,经过num_seconds秒
import pyautogui # 将鼠标移动到绝对位置(x,y)位置,经过num_seconds秒 # 如果持续时间为0或未指定,则立即移动。 # 注意:在Mac上拖动不能立即进行。 x = 10 y = 20 num_seconds = 1 pyautogui.moveTo(x, y, duration=num_seconds);
2.3.2 将鼠标移动到当前坐标的相对位置(x,y)位置,经过num_seconds秒
import pyautogui # 将鼠标移动到当前坐标的相对位置(x,y)位置,经过num_seconds秒 xOffset = 10 yOffset = 10 num_seconds = 1 pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)
2.3.3 在鼠标当前位置用左键单击鼠标
import pyautogui # 调用click()只需在鼠标当前位置用左键单击鼠标一次,但关键字参数可以改变这一点: # button关键字参数可以是“left”、“middle”或“right”。 moveToX = 1 moveToY = 2 num_of_clicks = 1 num_seconds = 1 pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
2.3.4 所有的点击都可以用click()完成,但这些函数是为了可读性而存在的
import pyautogui moveToX = 1 moveToY = 2 # 右键 pyautogui.rightClick(moveToX, moveToY) # 中键 pyautogui.middleClick(moveToX, moveToY) # 双击 pyautogui.doubleClick(moveToX, moveToY) # pyautogui.tripleClick(moveToX, moveToY)
2.3.5 正向滚动将向上滚动,反向滚动将向下滚动
import pyautogui # 正向滚动将向上滚动,反向滚动将向下滚动 # 在moveToX,moveToY位置,上下滚动 moveToX = 1 moveToY = 2 pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)
2.3.6 单个按钮按下和向上事件可以单独调用:
import pyautogui # 单个按钮按下和向上事件可以单独调用: moveToX = 10 moveToY = 20 # 在指定位置按下鼠标左键 pyautogui.mouseDown(x=moveToX, y=moveToY, button='left') # 在指定位置抬起鼠标左键 pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')
2.4 键盘功能
2.4.1
import pyautogui # 按键转到函数调用时键盘光标所在的位置。 # interval参数用于指定每两个字符之间输入的时间间隔。 pyautogui.typewrite('Hello world!\n', interval=secs_between_keys)
2.4.2 在光标位置依次输入指定的字符列表:
import pyautogui # interval参数用于指定每两个字符之间输入的时间间隔 # 例如(先按a,再按b,再按c,再按<—,再按删除键,再按回车键,再按f1键): pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'],interval=secs_between_keys)
2.4.3 实现同时按下指定按键(快捷键的实现)
import pyautogui # 密钥名称的完整列表位于中。键盘热键(如Ctrl-S或Ctrl-Shift-1) # 可以通过将键名称列表传递给hotkey()来完成: # ctrl-c 复制 pyautogui.hotkey('ctrl', 'c') # ctrl-v 粘贴 pyautogui.hotkey('ctrl', 'v')
2.4.4 单个键的按下和向上事件
# 单个按钮按下和向上事件可以单独调用: key_name = 'a' # 按下 pyautogui.keyDown(key_name) # 抬起 pyautogui.keyUp(key_name)
2.5 消息框功能
暂停程序,直到单击某个内容上的“确定”,或者显示一些信息:
2.5.1 向用户展示信息,只有一个确定键
import pyautogui # 向用户展示信息,只有一个确定键 pyautogui.alert('该提醒框,只有一个确定按钮')
2.5.2 用户需要点击确定或者取消
import pyautogui # 用户需要点击确定或者取消 pyautogui.confirm('该提醒框包括一个确定按钮 一个取消按钮')
2.5.3 带有输入框的消息框
import pyautogui # 如果用户单击“取消”,prompt()函数将返回None。 pyautogui.prompt('该提醒框可以输入一串字符串,并带有一个确定 一个取消按钮')
2.6 屏幕截图功能
在Linux上,必须运行sudo-apt-get-install-scrot才能使用屏幕截图功能。
2.6.1 PIL图像对象信息,不保存带本地
import pyautogui img_object = pyautogui.screenshot() print("PIL图像对象:",img_object) # PIL图像对象: <PIL.Image.Image image mode=RGB size=1920x1080 at 0x282E8EE9160>
2.6.2 获取PIL图像并保存到本地
import pyautogui # 获取PIL图像并保存到本地 img_object = pyautogui.screenshot('foo.png') print("PIL图像对象:",img_object) # PIL图像对象: <PIL.Image.Image image mode=RGB size=1920x1080 at 0x282E91BE940>
2.6.3 寻找屏幕上第一个感兴趣图像的位置
import pyautogui # 寻找屏幕上第一个感兴趣图像的位置 img_object_location = pyautogui.locateOnScreen('looksLikeThis.png') # 返回第一个图像的left, top, width,height) print("第一个感兴趣图像的位置信息",img_object_location) # 第一个感兴趣图像的位置信息 Box(left=858, top=166, width=85, height=28)
2.6.4 寻找屏幕上所有感兴趣图像的位置
import pyautogui # 寻找屏幕上所有感兴趣图像的位置 for img_object_location_i in pyautogui.locateAllOnScreen('looksLikeThis.png'): print("感兴趣图像的位置信息",img_object_location_i) # 感兴趣图像的位置信息 Box(left=858, top=166, width=85, height=28)
2.6.5 返回在屏幕上感兴趣图像中间位置的(X,Y)的坐标
import pyautogui # 返回在屏幕上感兴趣图像中间位置的(X,Y)的坐标,如果在屏幕上找不到图像将返回“None”,速度慢,1~2S location_x_y = pyautogui.locateCenterOnScreen('looksLikeThis.png') print("感兴趣图像中间位置的(X,Y)的坐标",location_x_y) # 感兴趣图像中间位置的(X,Y)的坐标 Point(x=900, y=180)