pyautoGUI基本用法速查

一、安装和特性

1、安装和使用

  1. 在终端使用 pip 命令工具进行安装:

    > pip install pyautogui
    
  2. 在代码文件中引入

    import  pyautogui
    

2、一些基本特性

  1. 破损安全
    为了能够及时中断,PyAutoGUI提供了一个保护措施。当 pyautogui.FAILSAFE = True 时,如果把鼠标光标在屏幕左上角,PyAutoGUI的相关函数就会产生 pyautogui.FailSafeException 异常。如果程序一旦失控,需要中断PyAutoGUI函数,就把鼠标光标移动到屏幕左上角。
    通常没有特殊要求的话默认会保留这个中断后门,要禁用这个特性,就把FAILSAFE设置成 False ,但建议不要禁用。
    import  pyautogui
    
    pyautogui.FAILSAFE = False
    
  2. 时停
    通常为了更好的观察程序运行的情况,我们会手动放慢程序运行的速度。
    一般来说使用时间模块【time】里面的 time.sleep(x) 函数也能实现,但 pyautoGUI 内置了一个更方便简易的设置:
    pyautogui.PAUSE = x
    
    其中 x 是想要设置的时间,使用方法就是在我们想要执行的代码前插入即可。例如:
    import pyautogui
    ...
    pyautogui.PAUSE = 2.5			#代码运行到这会暂定2.5秒
    pyautogui.moveTo(100,100)	
    
  3. 运行周期
    对于任何非瞬间完成的操作,如鼠标拖拽、滑动、滚轮滚动;键盘输入等,都可以设置动作的时间。在操作函数里添加一个参数 duration = x 即可。
    例如:
    import pyautogui
    ...
    pyautogui.moveTo(100,100,duration = 2 )	# 鼠标执行移动到此坐标(100,100)的运行过程要花费2秒
    
  4. 坐标和鼠标体系
    pyautoGUI 中 ,使用X和Y轴的笛卡尔坐标体系(x,y)。
    原点 (0,0) 在左上角,分别向右、向下增大, x 的最大值为屏幕宽度,y的最大值为屏幕高度。可以使用内置函数  pyautogui.size( )  获取屏幕尺寸。
    import pyautogui
    ...
    x = pyautogui.size( )
    print( x )                   		     #打印到命令行...
    # (1920, 1080)   
    
    光标的当前位置用position( )找到。
    import pyautogui
    ...
    xx = pyautogui.position()
    print( xx )                       			#打印到命令行...
    # (272, 688)
    

二、使用方法

1、对屏幕操作

  1. 全屏截图
    使用内置函数 pyautogui.screenshot('xx.png')可以做到,其中函数内的参数 'xx.png' 不是必须写的,它可以随意命名,如果写了的话,那么此时的屏幕截图会以 'xx.png' 的名字保存到当前程序的文件夹下。
    例如:

    import pyautogui
    ...
    pyautogui.screenshot('当前截图.png')	
    # 如书写无误的话,那么在项目目录下会多出一个名为 当前截图.png 的图片
    
  2. 查找相似图片
    如果想要对某个按钮执行点按操作的话要首先找到这个按钮的所在位置。
    可以将这个按钮的截图保存为一个图片。
    使用  locateOnScreen( ) 函数来定位,这个函数会返回一个元组,里面是这个按钮的坐标。

    import pyautogui
    ...
    pyautogui.locateOnScreen('按钮.png')	
    (0, 1040, 48, 40)       
    # 元组里面的值分别是(最左x坐标,最顶y坐标,宽度,高度)。
    

    要是样式相同的按钮不止一个,但每个都想找到的话,可以使用 locateAlOnScreen()找到,函数会返回所有的相似图片的元组坐标。

    import pyautogui
    ...
    pyautogui.locateAllOnScreen('按钮.png')	
    [(0, 1040, 48, 40),(50, 900, 48, 40)]       #假设有两个按钮的话会返回两个按钮的坐标 
    

2、对鼠标操作

  1. 移动
    使用 pyautogui.moveTo( x, y,,duration = n )可以将鼠标移动到坐标 (x,y) 处。
    duration = n 为设置鼠标运动的时间,不是必须的参数,不设置的话鼠标将进行瞬移。
    例如:
    import pyautogui
    ...
    pyautogui.moveTo(100, 200)
    
    当无法对目的地坐标进行准确定位的话,可以直接传入一个图片作为坐标,前提是这个图片的内容一定要在屏幕上出现过。
    例如:
    import pyautogui
    ...
    pyautogui.moveTo('按钮.png')	
    
  2. 点击、双击、三击、右键
    【 click() 】函数模拟单击鼠标左键一次的行为。
    import pyautogui
    ...
    pyautogui.click( )	
    
    想对某个位置进行点击,可以直接将坐标传入函数。
    和移动鼠标一样,也可以传入屏幕中出现过的某个元素的截图。
    import pyautogui
    ...
    pyautogui.click(100, 200)	
    pyautogui.click('按钮.png')	
    
    双击、三击、右键使用的方法相同。
    import pyautogui
    ...
    pyautogui.doubleClick(100, 200)	        #双击
    pyautogui.doubleClick('按钮.png')	
    
    pyautogui.tripleClick(100, 200)	        #三击
    pyautogui.tripleClick('按钮.png')	
    
    pyautogui.rightClick(100, 200)	        #右键
    pyautogui.rightClick('按钮.png')	
    
  3. 拖拽
    pyautoGUI 通过【dragTo( x , y , button = left)】和【 dragRel( x ,y , button = left) 】函数实现。
    另外,他们有一个 button 参数可以设置成 leftmiddle 和 right 三个键。代表使用鼠标的哪个键进行拖拽。
    例如:
    import pyautogui
    
    
    # 按住鼠标左键,把鼠标拖拽到`(100, 200)`位置
    pyautogui.dragTo(100, 200, button='left')
    
    # 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
    pyautogui.dragTo(300, 400, 2, button='left')
    
    # 按住鼠标右键,用2秒钟把鼠标拖拽到(30,0)位置
    pyautogui.dragTo(30, 0, 2, button='right')
    
    同样的,前两个参数 ( x , y ) ,也就是坐标参数,可以用一个曾出现在屏幕的元素截图进行参数替代。
    例如:
    import pyautogui
    
    
    # 按住鼠标左键,把鼠标拖拽到文件夹位置
    pyautogui.dragTo('文件夹.png', button='left')
    
    # 按住鼠标左键,用2秒钟把鼠标拖拽到'文件夹.png'位置
    pyautogui.dragTo('文件夹.png', 2, button='left')
    
    # 按住鼠标右键,用2秒钟把鼠标拖拽到'文件夹.png'位置
    pyautogui.dragTo('文件夹.png', 2, button='right')
    
  4. 滚轮
    鼠标滚轮滚动可以用 scroll( n , x , y ) 函数来模拟。 n 为滚动的像素长度。
    还有非必须参数 xy 参数,可以在滚动之前定位到 (x , y ) 位置;如果不写 x 和 y 那么鼠标将在当前位置进行滚动。
    例如:
    import pyautogui
    
    
    #  向上滚动10像素
    pyautogui.scroll(10)
    
    #  向下滚动10像素
    pyautogui.scroll(-10)
    
    #  移动到(100, 100)位置再向上滚动10像素
    pyautogui.scroll(10, x=100, y=100)
    
  5. 按和松键
    鼠标的 按和松键 的应用场景和 拖拽 的应用场景类似,可以简单了解一下。
    mouseDown( ) 和 mouseUp( ) 函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有x,y和button。例如:
    import pyautogui
    
    
    pyautogui.mouseDown()       				# 鼠标左键按下
    
    pyautogui.mouseUp()         				# 鼠标左键松开
    
    pyautogui.mouseDown(button='right')  			# 按下鼠标右键
    
    pyautogui.mouseUp(button='right', x=100, y=200)       # 移动到(100, 200)位置,然后松开鼠标右键
    

3、对键盘操作

  1. 输入英文和数字
    键盘控制的主要函数就是 typewrite( 'xxxxx' , interval = 0.25 ) 。这个函数可以实现字符 xxxxx 输入。要在两次输入间增加时间间隔,可以用 interval 参数。例如:

    import pyautogui
    
    
    pyautogui.typewrite('Hello world!')         #  输入Hello world!
    
    pyautogui.typewrite('Hello world!', interval=0.25)      #  每次输入间隔0.25秒,输入Hello world!
    

    typewrite( ) 函数只能用于字符串的输入,不能按SHITF和F1这些功能键。

  2. 按键
    要想使用功能键或者字母键,有其他的方法,那就是使用 press( ) keyDown( ) 和 keyUp( ) 函数。

    import pyautogui
    
    #  ENTER键
    pyautogui.press('enter')
    
    #  F1键
    pyautogui.press('f1')
    
    #  左方向键
    pyautogui.press('left')
    

    press( ) 函数其实是 keyDown( ) 和 keyUp( ) 函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。例如,按下 shift键 的同时按3次左方向键:

    import pyautogui
    
    
    pyautogui.keyDown('shift')		#  按下`shift`键
    pyautogui.press('left')
    pyautogui.press('left')
    pyautogui.press('left')
    pyautogui.keyUp('shift')		#  松开`shift`键
    

    和 typewrite( ) 函数一样,可以用数组把一组键传入 press( ) 。例如:

    import pyautogui
    
    
    pyautogui.press(['left', 'left', 'left'])   	# 按下三次方向键左←
    
  3. 组合快捷键
    PyAutoGUI 提供了 hotkey( ) 函数来绑定若干按键,以此模拟实现同时按下多个组合键的情况。
    假设要快捷键呼出 任务管理器 ,可以直接使用  hotkey( ) 函数,并传入 'ctrl' 、 'shift' 、 'ese' 三个键。

    import pyautogui
    
    
     pyautogui.hotkey('ctrl', 'shift', 'ese')   # 表示同时按下控制键,上档键,和退出键
    

    将函数拆解开,也就等同于分别使用三次keyDown( ) 和 keyUp( )函数 。

    import pyautogui
    
    
    pyautogui.keyDown('ctrl')           # 表示按下控制键
    pyautogui.keyDown('shift')          # 表示按下上档键
    pyautogui.keyDown('esc')            # 表示按下退出键
    
    pyautogui.keyUp('esc')              # 表示松开控制键
    pyautogui.keyUp('shift')            # 表示松开上档键
    pyautogui.keyUp('ctrl')             # 表示松开退出键
    
  4. 到底能模拟哪些键?
    受限于厂家和系统(windows、osx、linux)不同,每个人的键盘多少都会写细微差别,pyautoGUI 内置了一套通用按键,可以调用函数 pyautogui.KEYBOARD_KEYS 用于查询。

    import pyautogui
    
    print( pyautogui.KEYBOARD_KEYS )		#打印出按键列表清单
    

    终端输出:

    >  ['\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', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
    

    那么终端打印出来的这些字符都是能直接用 keyDown( ) 、 keyUp( )hotkey( ) 于这三个函数的。

  5. 输入中文
    对于中文 pyautoGUI 并不支持,要想输入中文,可以使用另个经典模块 -- pyperclip 。
    首先,用命令行工具进行安装:

    >  pip install pyperclip
    

    之后在程序文件之中引入,利用 pyperclip.copy( ) 函数,并传入想要书写的内容,最后粘贴。

    import pyperclip 
    import pyautogui
    
    
    pyperclip.copy(u'Hello world!你好世界')         #传入·Hello world!你好世界·
    pyperclip.paste()                              #粘贴
    

    两个模块可以灵活交叉使用。

    import pyperclip
    import pyautogui
    
    
    pyperclip.copy(u'Hello world!你好世界')         #传入·Hello world!你好世界·
    pyautogui.hotkey('ctrl', 'v')                  #使用快捷键粘贴
    
posted @ 2023-07-27 09:39  十月偶尔下雨  阅读(174)  评论(0)    收藏  举报