以下翻译来自官司网说明网站 pyautogui.readthedocs.io
pyautogui模块的目的是提供跨平台的自动化键盘鼠标操作。这个模块我们尽可能设计得容易使用。例如,下面的代码都会把鼠标指针移到计算机屏幕中央。
>>> import pyautogui >>> screenWidth, screenHeight = pyautogui.size() >>> pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
pyautogui模块能让你模拟鼠标指针的移动、单击鼠标、拖曳鼠标指针,按住或松开某键,或者组合键也是没问题的。下面是一个例子:
>>> import pyautogui >>> screenWidth, screenHeight = pyautogui.size() # 获取屏幕尺寸 >>> currentMouseX, currentMouseY = pyautogui.position() # 当前鼠标指针坐标 >>> pyautogui.moveTo(100, 150) # 移动鼠标到(100,150)坐标 >>> pyautogui.click() # 单击 >>> pyautogui.moveRel(None, 10) # move mouse 10 pixels down 向下移动鼠标指针10个像素 >>> pyautogui.doubleClick() # 双击 >>> pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad) # 2秒内移动鼠标指针到某坐标 # 下面是模拟输入英文字符 >>> pyautogui.typewrite('Hello world!', interval=0.25) # 1/4秒的间隔时间输入一个字符 >>> pyautogui.press('esc') # 按esc键 >>> pyautogui.keyDown('shift') # 按住上档键 >>> pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left']) # 按左左左左左左 >>> pyautogui.keyUp('shift') # 松开上档键 >>> pyautogui.hotkey('ctrl', 'c') # 按Ctrl + C键
下面的例子是拖动鼠标指针画一个方形螺旋图,请先打开mspaint,方法是按Win+r键,然后在运行对话框中输入 mspaint。
>>> distance = 200 >>> while distance > 0: pyautogui.dragRel(distance, 0, duration=0.5) # 向右移动 distance -= 5 pyautogui.dragRel(0, distance, duration=0.5) # 向下移动 pyautogui.dragRel(-distance, 0, duration=0.5) # 向左移动 distance -= 5 pyautogui.dragRel(0, -distance, duration=0.5) # 向上移动
在Windows操作系统中,pyautogui不需要依赖其它模块。如,它不需要有pywin32模块支持,这是由于它使用ctypes模块。安装pyautogui的方法很简单,用 pip install pyautogui命令即可,它会安装pillow,以实现截屏功能。通过命令pyautogui.PAUSE = 2.5,可以让每次动作后暂停2.5秒。以下是右击,中击,双击,三击模拟代码:
>>> pyautogui.rightClick(x=moveToX, y=moveToY) # 右击 >>> pyautogui.middleClick(x=moveToX, y=moveToY) # 中击 >>> pyautogui.doubleClick(x=moveToX, y=moveToY) # 双击 >>> pyautogui.tripleClick(x=moveToX, y=moveToY) # 三击
以下是信息提示框功能:
>>> pyautogui.alert('显示一个有OK的提示对话框') >>> pyautogui.confirm('显示一个有OK和Cancle的对话框') 'OK' >>> pyautogui.prompt('输入对话框') 'This is what I typed in.'
下面是截屏功能:
>>> pyautogui.screenshot() # 返回pilllow图像模式 <PIL.Image.Image image mode=RGB size=1920x1080 at 0x24C3EF0> >>> pyautogui.screenshot('风火轮编程.png') #返回图像并保存到文件中 <PIL.Image.Image image mode=RGB size=1920x1080 at 0x31AA198>
如果你想查找计算机屏上的某个图片,用locateOnScreen命令。以下是代码:
>>> pyautogui.locateOnScreen('风火轮编程_李兴球原创Python创意程序.png') # 返回找到的第一个矩形 (left, top, width, height) (863, 417, 70, 13)
locateAllOnScreen命令能返回所有找到的图形,返回它们的矩形,以下是代码:
>>> for i in pyautogui.locateAllOnScreen('风火轮编程_李兴球_www.lixingqiu.com.png') ... ... (863, 117, 70, 13) (623, 137, 70, 13) (853, 577, 70, 13) (883, 617, 70, 13) (973, 657, 70, 13) (933, 877, 70, 13)
或像下面这样的代码也可以呀:
>>> list(pyautogui.locateAllOnScreen('www.scratch8.net.png')) [(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]
下面的代码可以不断地获取鼠标指针坐标:
import pyautogui, sys print('Press Ctrl-C to quit.') # 按Ctrl+C 中断 try: while True: x, y = pyautogui.position() positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4) print(positionStr, end='') print('\b' * len(positionStr), end='', flush=True) except KeyboardInterrupt: print('\n')
onScreen命令检测坐标是否在计算机屏幕范围内:
>>> pyautogui.onScreen(0, 0) True >>> pyautogui.onScreen(0, -1) False >>> pyautogui.onScreen(0, 99999999) False >>> pyautogui.size() # 屏幕尺寸 (1920, 1080) >>> pyautogui.onScreen(1920, 1080) False >>> pyautogui.onScreen(1919, 1079) True
拖动鼠标指针示例代码:
>>> pyautogui.dragTo(100, 200, button='left') # 按住左键,拖动鼠标指针到100,200坐标 >>> pyautogui.dragTo(300, 400, 2, button='left') # 按住左键,在2秒内拖动鼠标指针到100,200坐标 >>> pyautogui.drag(30, 0, 2, button='right') # 按住右键,在2秒内拖动鼠标指针到30,0坐标
下面的命令滚动鼠标,就是按滚轮模拟:
>>> pyautogui.scroll(10) # 向上滚动10次 >>> pyautogui.scroll(-10) # 向下滚动10次 >>> pyautogui.scroll(10, x=100, y=100) # 移动鼠标指针到100, 200, 然后滚动10次
以下是模拟键盘按键代码:
>>> pyautogui.keyDown('shift') # 按住shift键 >>> pyautogui.press('left') # 按左方向箭头 >>> pyautogui.press('left') # 按左方向箭头 >>> pyautogui.press('left') # 按左方向箭头 >>> pyautogui.keyUp('shift') # 松开shift键
下面是按键表:
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
查找屏幕上的像素:
>>> import pyautogui >>> im = pyautogui.screenshot() # 获取快照,截屏 >>> im.getpixel((100, 200)) # 得到坐标点像素值 (130, 135, 144)
检测屏幕上某坐标点是否匹配像素值:
>>> import pyautogui >>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144)) True >>> pyautogui.pixelMatchesColor(100, 200, (0, 0, 0)) False