Pyautogui 实现键盘鼠标动作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou906767220/article/details/81103366

安装

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 pyautogui

  • Linux: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

  • 定位函数

    可以定位截图在屏幕上的坐标位置。

    还是几个定位函数。都是从左上角原点开始向右向下搜索截图位置:

    1. locateOnScreen(image,grayscale=False):返回找到的第一个截图Image对象在屏幕上的坐标(left, top, width,height),如果没找到返回None
    2. locateCenterOnScreen(image, grayscale=False):返回找到的第一个截图Image对象在屏幕上的中心坐标(x, y),如果没找到返回None
    3. locateAllOnScreen(image, grayscale=False):返回找到的所有相同截图Image对象在屏幕上的坐标(left, top, width, height)的生成器
    4. locate(needleImage, haystackImage, grayscale=False):返回找到的第一个截图Image对象在haystackImage里面的坐标(left, top,width, height),如果没找到返回None
    5. 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)

猜你喜欢

转载自blog.csdn.net/zhou906767220/article/details/81103366