pyautogui简介_python中的按键精灵_键盘鼠标模拟

以下翻译来自官司网说明网站 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

 

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在python分类目录。将固定链接加入收藏夹。