文章目录
- 前言
- 一、鼠标
- 1.1 鼠标坐标
- 1.2 鼠标移动
- 1.3 鼠标拖动
- 1.4 鼠标点击
- 1.5 鼠标按下、抬起
- 1.6 鼠标滚动
- 二、键盘
- 2.1 键盘输入
- 2.2 键盘按键
- 2.3 键盘复合键简化
- 2.4 键盘按键字符大全
- 三、弹窗
- 3.1 alert
- 3.2 confirm
- 3.3 prompt
- 3.4 password
- 四、屏幕
- 4.1 屏幕坐标
- 4.2 屏幕大小
- 4.3 截屏
- 4.4 图片位置
- 4.5 像素
- 五、配置和常用代码
- 5.1 配置
- 5.2 常用代码块
- 参考
前言
PyAutoGUI
是一个跨平台GUI自动化Python模块,用于用编程方式控制鼠标和键盘,不仅支持 Windows, 还支持Linux、MAC。
安装方式:
pip install pyautogui
一、鼠标
pyautogui 支持以屏幕左上角为原点,往右为X轴正方向,向下为Y轴正方向的坐标系
1.1 鼠标坐标
x,y = pyautogui.position()
1.2 鼠标移动
pyautogui.moveTo(100, 200)
pyautogui.moveTo(None, 500)
pyautogui.moveTo(600, None)
pyautogui.moveTo(100, 200, 2)
pyautogui.move(0, 50)
pyautogui.move(0, 50, 2)
moveTo 函数会将鼠标移动到指定坐标,
- x,y:XY坐标,如果有None,则会保持相应为None的坐标,移动另一项坐标。
- 第三个参数 during 是延迟时间,单位为秒。默认是即时。
move 函数是移动相对应坐标的像素点,向右或向下移动,为负数时则是相反方向。同样支持延迟时间这个参数
1.3 鼠标拖动
pyautogui.dragTo(100, 200, button='left')
pyautogui.dragTo(300, 400, 2, button='left')
pyautogui.drag(30, 0, 2, button='right')
dragTo 函数支持鼠标拖动到指定坐标
- x,y:XY坐标
- duration: 支持延迟参数。
- button: 支持选择鼠标的左键、中键或右键
1.4 鼠标点击
pyautogui.click()
pyautogui.click(x=100, y=200)
pyautogui.click(button='right')
pyautogui.click(clicks=2)
pyautogui.click(clicks=2, interval=0.25)
pyautogui.click(button='right', clicks=3, interval=0.25)
pyautogui.doubleClick()
pyautogui.tripleClick()
pyautogui.rightClick()
click函数默认当前鼠标位置左键点击,
- x,y:XY坐标表示移动到给定坐标再点击
- button:选择left,right,middle
- clicks:点击次数
- interval:点击间隔
1.5 鼠标按下、抬起
鼠标点击和拖动是由鼠标按下和鼠标抬起两部分组成。如果想单独控制这两部分,可以用下面的函数
pyautogui.mouseDown(button='right')
pyautogui.mouseUp(button='right', x=100, y=200)
1.6 鼠标滚动
pyautogui 支持鼠标中键进行滚动,scroll 是垂直滚动。在MAC和Linux 还支持水平滚动 hscroll
pyautogui.scroll(10, x=100, y=100)
pyautogui.hscroll(10)
二、键盘
2.1 键盘输入
可以通过write输入单字符按键,不能输入Shift/Alt这种按键
pyautogui.write('Hello world!', interval=0.25)
2.2 键盘按键
press 表示按下键盘上的按键,press其实可以由 keyDown按下和keyUp抬起组成,当使用组合键时,可以搭配使用
pyautogui.press('enter')
pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left'])
pyautogui.keyUp('shift')
pyautogui.press('left', presses=3)
2.3 键盘复合键简化
pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left'])
pyautogui.keyUp('shift')
# 简化为
with pyautogui.hold('shift'):
pyautogui.press('left', presses=3)
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')
# 简化为
pyautogui.hotkey('ctrl', 'shift', 'esc')
2.4 键盘按键字符大全
三、弹窗
PyAutoGUI 利用 PyMsgBox 中的消息框函数提供跨平台、纯Python方式来显示JavaScript风格的消息框。提供了四个消息框.
3.1 alert
显示一个带有文本和一个确定按钮的简单消息框。返回单击的按钮的文本。
pyautogui.alert(text='这是弹窗', title='alert弹窗', button='OK')
3.2 confirm
显示带有按钮的消息框。返回单击的按钮的文本。
pyautogui.confirm(text='Yes or No?', title='confirm弹窗', buttons=['Yes', 'No'])
3.3 prompt
显示带有文本输入的消息框和“确定和取消”按钮。返回输入的文本,如果单击“取消”,则返回None。
pyautogui.prompt(text='输入姓名个数', title='弹窗', default='1')
3.4 password
显示带有文本输入的消息框和“确定和取消”按钮。键入的字符显示为*。返回输入的文本,如果单击“取消”,则返回None。
pyautogui.password(text='输入密码', title='弹窗', default='', mask='*')
四、屏幕
4.1 屏幕坐标
判断坐标是否位于屏幕上
pyautogui.onScreen(1000, 100)
4.2 屏幕大小
返回屏幕分辩率大小
pyautogui.size()
4.3 截屏
可通过screenshot 函数进行截屏,还可以截取固定区域的屏幕,四个参数分别是left, top, width, and height (区域左上角坐标和宽高)
im2 = pyautogui.screenshot('my_screenshot.png')
im = pyautogui.screenshot('my_screenshot.png', region=(0,0, 300, 400))
4.4 图片位置
如果你有一个图像文件,你就可以在屏幕上直观地找到它,可以通过locateOnScreen 用于判断 图片在屏幕中的位置。
- confidence 是置信度,0-1,可通过配置此参数忽略一些像素差异
- region 是区域
- grayscale 灰度匹配,默认False,为True可加快速度,但可能造成 false-positive
如果没找到,从 0.9.41版本开始会抛出 ImageNotFoundException 异常,之前是返回None。
找到会返回第一个找到的图像:一个4位整数元祖(left, top, width, height)表示的区域
此外,还有一些常用的函数
- center 可获取区域的中心点
- locateCenterOnScreen 会将locateOnScreen、center两者操作合一
- locateAllOnScreen:会返回所有满足的图像
- locate:在图片haystackImage中查找needleImage,而不是从屏幕里
- locateAll:返回所有满足的图像
location=pyautogui.locateOnScreen('calc7key.png')
pyautogui.locateOnScreen('calc7key.png', confidence=0.9, region=(0,0, 300, 400))
pyautogui.center(location)
pyautogui.locateCenterOnScreen('calc7key.png')
locateAllOnScreen(image, grayscale=False)
locate(needleImage, haystackImage, grayscale=False)
locateAll(needleImage, haystackImage, grayscale=False)
4.5 像素
# 获取位置像素
im = pyautogui.screenshot()
pix = im.getpixel((100, 200))
pix = pyautogui.pixel(100, 200)
# 位置匹配像素,返回True/False
pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
五、配置和常用代码
5.1 配置
# 所有pyautogui的指令都要暂停一秒,这样做,可以防止键盘鼠标操作太快
pyautogui.PAUSE = 1
# 默认为True, 这项功能意味着:当鼠标的指针在屏幕的最左上方,程序会抛异常 pyautogui.FailSafeException,目的是为了防止程序无法停止
pyautogui.FAILSAFE = True
5.2 常用代码块
- 复制粘贴
pyautogui.hotkey('ctrl', 'c')
pyautogui.hotkey('ctrl', 'v')
- 屏幕定位图片
try:
imagePosition = pyautogui.locateOnScreen('image0.png', confidence=0.9)
if imagePosition:
pass
else:
pass
except ImageNotFoundException:
pass