PyAutoGUI介绍
- pyautogui是用来做GUI桌面应用自动化的Python包,功能类似于按键精灵:可以实现控制鼠标、键盘、消息框、截图、定位功能
- pyautogui的特点:
- 纯python实现,源码清晰可见
- 跨平台,支持linux,windows,mac
- 操作简单,会python就行
- 需要特别注意的是:pyautogui不支持中文输入,但可以配合pyperclip模块进行复制粘贴
- 官方文档
安装
windows安装pyautogui
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
mac安装pyautogui
pip install pyobjc-core
pip install pyobjc
pip install pyautogui
linux安装pyautogui
#sudo apt-get install scrot python3-tk python3-dev
pip install python3-xlib
pip install pyautogui
1. 鼠标操作
1.1 屏幕和鼠标位置
屏幕位置有X和Y直角坐标表示,X坐标从左侧的0开始,向右增加。与数学不同, Y坐标从顶部的0开始,向下增加。
±--------------------------+
| | Y increases
| | |
| 1920 x 1080 screen | |
| | V
| |
| |
±--------------------------+ 1919, 1079
- 左下角的像素位于坐标(0,0)。如果屏幕的分辨率为1920*1080,则右下角的像素将为1919,1079(因为坐标始于0,而不是1)
- 屏幕分辨率大小由给size()函数作为两个整数的元组返回。给position()函数范睢鼠标的光标的当前X和Y坐标
- 在python交互模式下,运行如下代码:
import time
import pyautogui
print(pyautogui.size()) # 屏幕分辨率
try:
while True:
x, y = pyautogui.position() # 返回鼠标的坐标
# 打印当前鼠标位置坐标
print(f'鼠标坐标:x={x}, y={y}')
time.sleep(1)
# 捕获异常 KeyboardInterrupt:用户中断执行(通常是输入^C)
except KeyboardInterrupt:
print('已退出')
- 要检查XY坐标是否在屏幕上,请将它们(作为两个整数参数后者带有两个整数的单个元组/列表参数)传递给onScreen()参数,True如果在屏幕边界之内,则返回该函数False。
>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
1.2 鼠标移动
改moveTo()函数会将鼠标光标移至你传递的X和Y整数坐标。例如:
import pyautogui
# 在每次PyAutoGUI调用(具体的操作)后就会有2秒的暂停
pyautogui.PAUSE = 2
pyautogui.moveTo(100, 200) # moves mouse to X of 100, Y of 200.
pyautogui.rightClick() # 鼠标原地右键单击
pyautogui.moveTo(800, 800) # moves mouse to X of 800, Y of 800.
pyautogui.rightClick() # 鼠标原地右键单击
通常,鼠标光标会立即移动到新坐标。如果您希望鼠标逐渐移动到新位置,请在移动所需的持续时间(以秒为单位)中传递第三个参数。例如:
import pyautogui
pyautogui.moveTo(100, 200) # moves mouse to X of 100, Y of 200
pyautogui.rightClick() # 鼠标原地右键单击
pyautogui.moveTo(800, 800, 2) # moves mouse to X of 800, Y of 800 over 2 seconds
pyautogui.rightClick() # 鼠标原地右键单击
如果要将鼠标光标相对于其当前位置(相对位置)移动几个像素,请使用给move()功能。此函数的参数类似于moveTo().例如:
import pyautogui
# 在每次PyAutoGUI调用(具体的操作)后就会有2秒的暂停
pyautogui.PAUSE = 2
pyautogui.moveTo(140*2, 80*2) # moves mouse to X of 140*2, Y of 80*2.
pyautogui.rightClick() # 鼠标原地右键单击
# 从当前位置移动鼠标
pyautogui.move(188*2, 155*2) # move the mouse left 188*2, down 155*2 pixels.
pyautogui.rightClick() # 鼠标原地右键单击
1.3 鼠标拖拽
pyautogui的dragTo()和drag()函数的参数与moveTo()和move()函数的参数相似。此外,他们还有一个button可以设置为left,的关键字middle,并且right在拖动时按住鼠标键不放。例如:
import pyautogui
# 在每次PyAutoGUI调用(具体的操作)后就会有2秒的暂停
pyautogui.PAUSE = 2
# button可以设为 left, middle和right
pyautogui.dragTo(35*2, 35*2, button='left') # drag mouse to X of 35*2, Y of 35*2 while holding down left mouse button
pyautogui.drag(500, 0, 5) # 按住鼠标左键,用5秒钟把鼠标相对于(35*2, 35*2)往右移动500
1.4 鼠标点击
1.5 鼠标滚动
1.6 保护措施
2. 键盘操作
2.1 write()函数
2.2 press(),keyDown()和keyUp()函数
2.3 hotkey()函数
2.4 KEYBOARD_KEYS
3. 信息框操作
3.1 alert()函数
3.2 confirm()函数
3.3 prompt()函数
3.4 password()函数
3.5 消息框方法汇总
4. 截图定位操作
4.1 screenshot()函数
4.2 定位功能:
4.2.1 locateOnScreen()函数
4.2.2 locateCenterOnScreen函数
4.4.3 提高定位精度
4.4.4 加速定位
- 指定定位范围
- 降低灰度
4.4.5 方法汇总
5. 案例:自动写字表白
5.1 进程启动记事本
- os.system启动程序默认阻塞,开启一个进程让程序阻塞,原来的进程继续运行测试代码