pyautogui基本用法
作者:YXN-python 阅读量:20 发布日期:2024-11-05
介绍
Python的pyautogui库是一种用于自动化任务的强大工具,它可以模拟鼠标和键盘操作,执行各种GUI任务。无论是进行屏幕截图、自动填写表单、自动化测试还是进行GUI操作,pyautogui都可以派上用场。
安装
pip install pyautogui
# 为了更好地使用pyautogui,建议同时安装以下依赖:
pip install pillow
pip install mouseinfo
pip install opencv-python
基本操作
导入
import pyautogui
鼠标操作
获取鼠标当前位置
x, y = pyautogui.position()
print(f"鼠标当前位置: x={x}, y={y}")
移动鼠标
将鼠标移动到指定的坐标位置:
pyautogui.moveTo(100, 100, duration=1) # 将鼠标移动到(100, 100)的位置,持续1秒
# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。
# PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。
# 开始很慢,不断加速
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)
# 开始很快,不断减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)
# 一步一徘徊前进
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超过起点和终点
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)
鼠标点击
pyautogui.click(200, 200) # 在(200, 200)位置单击鼠标左键
pyautogui.click() # 左键单击
pyautogui.doubleClick(x=552, y=346) # 左键双击
pyautogui.rightClick() # 右键双击
pyautogui.middleClick() # 中键双击
pyautogui.rightClick() # 右键单击
鼠标拖拽
pyautogui.dragTo(200, 200, duration=0.2) # 拖动到指定位置
pyautogui.dragRel(-200, 0, durantion=0.2) # 相对位置拖动
鼠标长按
# 按下鼠标左键
pyautogui.mouseDown()
# 松开鼠标左键
pyautogui.mouseUp()
# 实际上,click()就是封装了上述两个函数
鼠标滚轮滚动
要模拟鼠标滚轮滚动:
pyautogui.scroll(10) # 向上滚动10个单位
pyautogui.scroll(-10) # 向下滚动10个单位
键盘操作
键盘输入
模拟键盘输入:
pyautogui.typewrite("Hello, World!") # 输入文本
模拟快捷键
模拟快捷键:
# 回车
pyautogui.press('enter')
pyperclip.copy("中文English") # 复制
# 组合键
pyautogui.hotkey("ctrl", "c") # 模拟Ctrl+C
# 打开文件资源管理器
pyautogui.hotkey('win', 'e')
# 等待文件资源管理器打开
pyautogui.sleep(1)
# 复制文件
pyautogui.hotkey('ctrl', 'c')
# 切换到另一个文件夹
pyautogui.hotkey('ctrl', 'v')
按下和释放键盘按键
按下和释放键盘按键:
pyautogui.keyDown("shift") # 按下Shift键
pyautogui.keyUp("shift") # 释放Shift键
消息框、输入框
PyAutoGUI 提供了简单的消息框和输入框功能
import pyautogui
# 显示一个消息框
pyautogui.alert('这是一个警告框!')
# 显示确认框,返回用户选择的结果
response = pyautogui.confirm('你想继续吗?', buttons=['继续', '取消'])
if response == 'OK':
print('用户选择继续')
else:
print('用户取消了操作')
# 显示一个输入框,接收用户输入
user_input = pyautogui.prompt('请输入您的姓名:')
print(f'用户输入: {user_input}')
# 样式同prompt(),用于输入密码,消息用*表示。
pyautogui.password(text='', title='', default='', mask='*')
等待和延迟
延迟执行
使用`pyautogui.sleep()`函数,可以添加延迟以等待操作完成:
pyautogui.sleep(2) # 等待2秒
等待特定的图像出现、查找图片位置
pyautogui.locateOnScreen()函数可以用于等待并定位屏幕上的特定图像,以便后续操作:
使用 confidence 参数,pyautogui 需要 opencv-python 库支持。可以通过以下命令安装:
pip install opencv-python
# 可选的 confidence 参数用于允许一定的匹配误差),找不到会报错 pyautogui.ImageNotFoundException
location = pyautogui.locateOnScreen("image.png", confidence=0.8)
if location is not None:
x, y, width, height = location
pyautogui.click(x + width / 2, y + height / 2)
`pyautogui` 库依赖于 `pyscreeze` 库进行图像识别。在 `pyscreeze` 的 `__init__.py` 文件中,有一个 `USE_IMAGE_NOT_FOUND_EXCEPTION` 配置项,当设置为 `True` 时,如果没有找到图像会抛出异常。您可以将这个值改为 `False`,这样在找不到图像时会返回 `None` 而不是抛出异常
图像定位
# 发现单个图像
pyautogui.locateOnScreen('summit.png')
# summit.png为已存在的图像。结果会返回(643, 745, 70, 29),表示屏幕首次发现图像的左x坐标,顶上的y坐标,宽度,高度。若找不到图像,则返回None
# 发现多个图像
list(pyautogui.locateAllOnScreen('summit.png'))
# 返回一个Generator对象,可以作为list的参数,返回一个四元元组的列表
# 得到图像的中心坐标
cx,cy = pyautogui.center((643, 745, 70, 29))
# (678,759)
屏幕
截屏
# 截取整个屏幕
screenshot = pyautogui.screenshot() # screenshot 是一个Image对象
# 截取指定区域的屏幕
# x, y, width, height 分别未初始坐标xy以及区域宽高
screenshot = pyautogui.screenshot(region=(x, y, width, height))
# 保存截图
screenshot.save('screenshot.png')
获取屏幕尺寸
可以使用以下命令获取屏幕的宽度和高度:
screen_width, screen_height = pyautogui.size()
print(f"屏幕宽度: {screen_width}, 屏幕高度: {screen_height}")
判断坐标是否在屏幕上
pyautogui.onScreen(122, 244)
识别屏幕上的颜色
使用`pyautogui.pixel()`函数,可以获取屏幕上指定位置的像素颜色:
color = pyautogui.pixel(300, 300)
print(f"颜色值:{color}")
# 或者
# 获取坐标(300,300)所在屏幕点的RGB颜色
pix = pyautogui.screenshot().getpixel((300, 300))
positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
print(positionStr) # 打印结果为RGB:( 60, 63, 65)
# 如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函数,把X、Y和RGB元组值穿入即可
# 如果所在屏幕中(x,y)点的实际RGB三色与函数中的RGB一样就会返回True,否则返回False
# tolerance参数可以指定红、绿、蓝3种颜色误差范围
pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)
比较指定坐标处颜色和给定颜色是否相同
# 前两个参数是x,y坐标,后面是颜色,相同返回True
pyautogui.pixelMatchesColor(50, 200, (255, 255, 255))
得到图像的中心坐标
cx,cy = pyautogui.center((643, 745, 70, 29)) # (678,759)
查找图像位置
`pyautogui.locateCenterOnScreen()`函数可以用于查找屏幕上特定图像的中心位置:
position = pyautogui.locateCenterOnScreen("image.png")
if position is not None:
x, y = position
pyautogui.click(x, y)
屏幕录制
pyautogui还可以用于屏幕录制,以便记录和重放屏幕操作。pyautogui可以与其他库一起使用,如`cv2`(OpenCV)来执行屏幕录制和回放。
以下是如何使用pyautogui进行屏幕录制的简单示例:
import pyautogui
import cv2
import numpy as np
# 设置屏幕录制的区域(示例为整个屏幕)
screen_width, screen_height = pyautogui.size()
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("screen_recording.avi", fourcc, 20.0, (screen_width, screen_height))
# 开始录制
while True:
# 获取屏幕截图
screenshot = pyautogui.screenshot()
frame = np.array(screenshot)
# 将截图添加到录制中
out.write(frame)
# 显示录制的画面(可选)
cv2.imshow("Screen Recording", frame)
# 按下q键停止录制
if cv2.waitKey(1) == ord("q"):
break
# 停止录制并释放资源
out.release()
cv2.destroyAllWindows()
上述代码创建了一个屏幕录制的视频文件(screen_recording.avi),它不仅捕获屏幕上的图像,还保存录制的视频。可以通过按下 "q" 键来停止录制。
安全机制
# 设置防故障机制
pyautogui.FAILSAFE = True # 将鼠标移到左上角可中断程序
pyautogui.PAUSE = 1 # 每个pyautogui函数调用后都会等待1秒钟,而非pyautogui不受影响
示例应用
示例 1: 将截图添加到粘贴板
import pyautogui
# 将截图添加到粘贴板
import win32clipboard
from io import BytesIO
def to_clipboard(image):
# 将Pillow图像对象转换为二进制数据流
output = BytesIO()
image.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:] # 跳过BMP文件头
output.close()
# 打开剪贴板并清空
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
# 将图像数据设置到剪贴板
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
# 关闭剪贴板
win32clipboard.CloseClipboard()
screenshot = pyautogui.screenshot()
to_clipboard(screenshot) # 将截图添加到粘贴板
示例2: 自动化网页操作
import pyautogui
import webbrowser
import time
# 打开浏览器
webbrowser.open('https://www.example.com')
# 等待页面加载
time.sleep(5)
# 模拟滚动鼠标滚轮
pyautogui.scroll(3) # 向上滚动3次
YXN-python
2024-11-05