安装
PyAutoGUI支持Python 2.x和Python 3.x
Windows:PyAutoGUI没有任何依赖,因为它用Python的ctypes模块所以不需要pywin32
pip install pyautogui
OS X:PyAutoGUI需要PyObjC运行AppKit和Quartz模块。这个模块在PyPI上的按住顺序是pyobjc-core和pyobjc
sudo pip install pyobjc-core
sudo pip install pyobjc
sudo pip install pyautoguiLinux:PyAutoGUI需要python-xlib(Python 2)、python3-Xlib(Python 3)
sudo pip install python3-xlib
sudo apt-get scrot
sudo apt-get install python-tk
sudo apt-get install python3-dev
sudo pip install pyautogui
GitHub: https://github.com/asweigart/pyautogui
常用指令
import pyautogui
# 当前鼠标的坐标
pyautogui.position()
# 当前屏幕的分辨率(宽度和高度)
pyautogui.size()
# (x,y)是否在屏幕上
x, y = 122, 244
pyautogui.onScreen(x, y)
操控鼠标
- 移动鼠标
# 用num_seconds秒的时间把光标的X轴(水平)坐标移动xOffset,
# Y轴(竖直)坐标向下移动yOffset。
xOffset, yOffset = 50, 100
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)
- 单击鼠标
# 鼠标当前位置单击左键
pyautogui.click()
# 2秒时间先移动到(100, 200)再单击
pyautogui.click(x=100, y=200, duration=2)
双击鼠标
要做多次单击可以设置clicks参数,还有interval参数可以设置每次单击之间的时间间隔。
pyautogui.click(clicks=2) pyautogui.doubleClick() # 两次单击之间停留0.25秒 pyautogui.click(clicks=2, interval=0.25)
三击鼠标
pyautogui.tripleClick()
右击鼠标
可以通过button参数设置left,middle和right三个键。
pyautogui.rightClick() pyautogui.click(button='right')
可以增加右击的次数
pyautogui.rightClick(clicks=2)
按下鼠标
mouseDown()和mouseUp()函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有x,y和button。
# 鼠标移动到该位置单击左键 pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')
放开鼠标
# 鼠标移动到该位置放开左键 pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')
鼠标拖拽
鼠标滚轮的单击和滚动
单击滑轮
pyautogui.click(button='middle')
鼠标滚轮滚动可以用scroll()函数和clicks次数参数来模拟。不同平台上的clicks次数不太一样。还有x和y参数可以在滚动之前定位到(x, y)位置。
# 向上滚动10格 pyautogui.scroll(10) # 向下滚动10格 pyautogui.scroll(-10) # 移动到(100, 100)位置再向上滚动10格 pyautogui.scroll(10, x=100, y=100)
在OS X和Linux平台上,PyAutoGUI还可以用hscroll()实现水平滚动。
# 向右滚动10格 pyautogui.hscroll(10) # 向左滚动10格 pyautogui.hscroll(-10)
操控键盘
typewrite()输入函数
键盘控制的主要函数就是typewrite()。这个函数可以实现字符输入。要在两次输入间增加时间间隔,可以用interval参数。# 输入Hello world! pyautogui.typewrite('Hello world!') # 每次输入间隔0.25秒,输入Hello world! pyautogui.typewrite('Hello world!', interval=0.25)
typewrite()函数只能用于单个字符键,不能按SHITF和F1这些功能键。
press(),keyDown()和keyUp()函数
要按那些功能键,可以用press()函数把pyautogui.KEYBOARD_KEYS里面按键对应的字符串输入进去。# ENTER键 pyautogui.press('enter') # F1键 pyautogui.press('f1') # 左方向键 pyautogui.press('left')
press()函数其实是keyDown()和keyUp()函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。例如,按下shift键的同时按3次左方向键:
# 按下`shift`键 pyautogui.keyDown('shift') pyautogui.press('left') pyautogui.press('left') pyautogui.press('left') # 松开`shift`键 pyautogui.keyUp('shift')
和typewrite()函数一样,可以用数组把一组键传入press()。
pyautogui.press(['left', 'left', 'left'])
hotkey()函数
为了更高效的输入热键,PyAutoGUI提供了hotkey()函数来绑定若干按键:
pyautogui.hotkey('ctrl', 'shift', 'ese')
等价于
pyautogui.keyDown('ctrl') pyautogui.keyDown('shift') pyautogui.keyDown('esc') pyautogui.keyUp('esc') pyautogui.keyUp('shift') pyautogui.keyUp('ctrl')
KEYBOARD_KEYS
print(pyautogui.KEYBOARD_KEYS)
消息弹窗
PyAutoGUI通过Tkinter实现了4种纯Python的消息弹窗函数
alert()函数
pyautogui.alert(text='', title='', button='OK')
显示一个简单的带文字和OK按钮的消息弹窗。用户点击后返回button的文字。
confirm()函数
# OK和Cancel按钮的消息弹窗 pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # 10个按键0-9的消息弹窗 pyautogui.confirm(text='', title='', buttons=range(10))
显示一个简单的带文字、OK和Cancel按钮的消息弹窗,用户点击后返回被点击button的文字,支持自定义数字、文字的列表。
prompt()函”)
pyautogui.prompt(text='', title='' , default='')
可以输入的消息弹窗,带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
password)函
pyautogui.password(text='', title='', default='', mask='*')
样式同prompt(),用于输入密码,消息用*表示。带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
截屏函数
screenshot()函数
screenshot()函数会返回Image对象(参考Pillow或PIL模块文档),也可以设置文件名:import pyautogui im1 = pyautogui.screenshot() im2 = pyautogui.screenshot('my_screenshot.png')
如果你不需要截取整个屏幕,还有一个可选的region参数。你可以把截取区域的左上角XY坐标值和宽度、高度传入截取。
im = pyautogui.screenshot(region=(0, 0, 300 ,400))
安装Pillow pip install Pillow
定位函数
可以定位截图在屏幕上的坐标位置。
还是几个定位函数。都是从左上角原点开始向右向下搜索截图位置:
- locateOnScreen(image,grayscale=False):返回找到的第一个截图Image对象在屏幕上的坐标(left, top, width,height),如果没找到返回None
- locateCenterOnScreen(image, grayscale=False):返回找到的第一个截图Image对象在屏幕上的中心坐标(x, y),如果没找到返回None
- locateAllOnScreen(image, grayscale=False):返回找到的所有相同截图Image对象在屏幕上的坐标(left, top, width, height)的生成器
- locate(needleImage, haystackImage, grayscale=False):返回找到的第一个截图Image对象在haystackImage里面的坐标(left, top,width, height),如果没找到返回None
- locateAll(needleImage, haystackImage, grayscale=False):返回找到的所有相同截图Image对象在haystackImage里面的坐标(left, top, width, height)的生成器
灰度值匹配
可以把grayscale参数设置为True来加速定位(大约提升30%),默认为False。这种去色(desaturate)方法可以加速定位,但是也可能导致假阳性(false-positive)匹配:
import pyautogui button7location = pyautogui.locateOnScreen('pyautogui/calc7key.png',grayscale=True) button7location
像素匹配
要获取截屏某个位置的RGB像素值,可以用Image对象的getpixel()方法:
import pyautogui im = pyautogui.screenshot() im.getpixel((100, 200))
也可以用PyAutoGUI的pixel()函数,是之前调用的包装:
pyautogui.pixel(100, 200)
如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor()函数,把X、Y和RGB元组值穿入即可:
pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
tolerance参数可以指定红、绿、蓝3种颜色误差范围:
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)