概述
PyAutoGUI是一个纯Python开发的跨平台GUI自动化工具,它是通过程序来控制计算机的键盘和鼠标的操作,从而实现自动化功能。所谓的GUI是指图形用户界面,即通过图形方式来显示计算机的界面,早期的计算机是以命令行界面来操作,其中Linux服务器版本仍在使用,而日常工作中使用的Windows、Mac和Linux桌面发行版都是以GUI来显示。PyAutoGUI一共分为三大功能:鼠标操控、键盘操控和截图识别,三者可以相互协调使用。截图识别可以为计算机提供简单的视觉功能,让PyAutoGUI在计算机上找到某个按钮或某个图标的坐标位置,然后操作鼠标或键盘来实现自动化控制。PyAutoGUI的使用范围相当广泛,只要计算机能运行的GUI程序都可以控制,正因如此,程序在执行过程中,如果人为操作鼠标和键盘都会对程序的执行造成一定的影响,也就是说,PyAutoGUI开发的自动化程序在稳定性方面是比较薄弱的。
截图与识别
PyAutoGUI有特定的方法来截取计算机的屏幕,获取屏幕快照。屏幕快照是RGB模式的图像,RGB模式是图片的色彩模式,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色),自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成。在Python里面,RGB颜色数值是一个长度为3的元组,如(62, 59, 55),62代表红色的深浅程度,59代表绿色,55代表蓝色,每种颜色的数值范围是0到255。每台计算机的屏幕分辨率都是不同的,因此屏幕快照的分辨率也不同。屏幕分辨率是屏幕上显示的像素个数,分辨率160×128的意思是水平方向含有像素数为160个,垂直方向像素数128个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。通俗点理解,在一张图片里面,像素数可以比喻成一个点,这个点的颜色是RGB模式,那么多个点可以组成一条线,多条线可以组成一个面,而这个面就代表这张图片
python
# 屏幕分辨率
screen = pyautogui.size()
print(screen) # width=1920, height=1080
# 截全屏
im = pyautogui.screenshot(imageFilename='screenshot.png')
# 截取指定坐标屏幕
region = (0, 0, 800, 900)
name = 'screenshot2.png'
im = pyautogui.screenshot(region=region, imageFilename=name)
# 识别
region = (0, 0, 60, 80)
name = 'screenshot3.png'
im = pyautogui.screenshot(region=region, imageFilename=name)
location = pyautogui.locateOnScreen(image='screenshot3.png')
print(location) # Box(left=0, top=0, width=60, height=80)
# 获取目标图像的中心坐标位置
location = pyautogui.locateCenterOnScreen(image='screenshot3.png')
print(location)
鼠标控制功能
python
# 移动鼠标
pyautogui.moveTo(0, 10, duration=3)
# 当前鼠标位置向X坐标偏移100,Y坐标偏移80
mouse = pyautogui.position()
print(mouse)
pyautogui.moveRel(xOffset=100, yOffset=80, duration=3)
# 获取鼠标位置
time.sleep(2)
mouse = pyautogui.position()
print(mouse)
# 拖拽
# dragTo()是根据当前鼠标的位置拖动到某个坐标位置
pyautogui.moveTo(1488, 434, duration=3)
pyautogui.dragTo(942, 245, duration=3)
# dragRel()是根据当前鼠标的位置拖动到某个偏移位置
pyautogui.moveTo(1633, 548)
pyautogui.dragRel(-100, 20, duration=3)
# 点击
pyautogui.click(1553, 533, clicks=2, interval=0.25, button='left') # 左击2次,每次点击间隔0.25s
# 滚动
pyautogui.moveTo(1005, 694)
pyautogui.scroll(clicks=-1000) # clicks为正向上,负值向下
# 长按右键
pyautogui.moveTo(x=1121, y=783)
pyautogui.mouseDown(button='right')
# 移动到(100,200)再释放右键
pyautogui.mouseUp(button='right', x=100, y=200)
键盘控制
python
pyautogui.typewrite("你好", interval=0.5) # interval文本输入速度
# 快捷键开启任务管理器
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')
# 热键是一种按键组合
pyautogui.hotkey('ctrl', 'shift', 'esc')
# 消息框
# alert
msg = pyautogui.alert(text='这是alert!', title='Alert', button='OK') # 只能有一个button
# msg的值为button的值。
print('ggggg')
# print(msg)
# confirm
buttons = ['ok', 'cancel'] # 可以设置多个button
msg = pyautogui.confirm(text="这是一个confirm", title='confirm', buttons=buttons)
print(msg)
# prompt
msg = pyautogui.prompt(text="这是一个prompt", title='prompt', default='')
print(msg)
# password
# 与prompt相似,只不过文本输入框的内容会被参数mask所替换显示。
msg = pyautogui.password(text="这是一个password", title='password', default='', mask='aaaaa')
print(msg)