pyautoGUI基本用法速查
一、安装和特性
1、安装和使用
-
在终端使用 pip 命令工具进行安装:
> pip install pyautogui -
在代码文件中引入
import pyautogui
2、一些基本特性
- 破损安全
为了能够及时中断,PyAutoGUI提供了一个保护措施。当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI的相关函数就会产生 pyautogui.FailSafeException 异常。如果程序一旦失控,需要中断PyAutoGUI函数,就把鼠标光标移动到屏幕左上角。
通常没有特殊要求的话默认会保留这个中断后门,要禁用这个特性,就把FAILSAFE设置成 False ,但建议不要禁用。import pyautogui pyautogui.FAILSAFE = False - 时停
通常为了更好的观察程序运行的情况,我们会手动放慢程序运行的速度。
一般来说使用时间模块【time】里面的time.sleep(x)函数也能实现,但 pyautoGUI 内置了一个更方便简易的设置:
其中 x 是想要设置的时间,使用方法就是在我们想要执行的代码前插入即可。例如:pyautogui.PAUSE = ximport pyautogui ... pyautogui.PAUSE = 2.5 #代码运行到这会暂定2.5秒 pyautogui.moveTo(100,100) - 运行周期
对于任何非瞬间完成的操作,如鼠标拖拽、滑动、滚轮滚动;键盘输入等,都可以设置动作的时间。在操作函数里添加一个参数duration = x即可。
例如:import pyautogui ... pyautogui.moveTo(100,100,duration = 2 ) # 鼠标执行移动到此坐标(100,100)的运行过程要花费2秒 - 坐标和鼠标体系
在 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、对屏幕操作
-
全屏截图
使用内置函数pyautogui.screenshot('xx.png')可以做到,其中函数内的参数'xx.png'不是必须写的,它可以随意命名,如果写了的话,那么此时的屏幕截图会以'xx.png'的名字保存到当前程序的文件夹下。
例如:import pyautogui ... pyautogui.screenshot('当前截图.png') # 如书写无误的话,那么在项目目录下会多出一个名为 当前截图.png 的图片 -
查找相似图片
如果想要对某个按钮执行点按操作的话要首先找到这个按钮的所在位置。
可以将这个按钮的截图保存为一个图片。
使用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、对鼠标操作
- 移动
使用pyautogui.moveTo( x, y,,duration = n )可以将鼠标移动到坐标(x,y)处。
duration = n 为设置鼠标运动的时间,不是必须的参数,不设置的话鼠标将进行瞬移。
例如:
当无法对目的地坐标进行准确定位的话,可以直接传入一个图片作为坐标,前提是这个图片的内容一定要在屏幕上出现过。import pyautogui ... pyautogui.moveTo(100, 200)
例如:import pyautogui ... pyautogui.moveTo('按钮.png') - 点击、双击、三击、右键
【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') - 拖拽
pyautoGUI 通过【dragTo( x , y , button = left)】和【dragRel( x ,y , button = left)】函数实现。
另外,他们有一个button参数可以设置成left,middle和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') - 滚轮
鼠标滚轮滚动可以用scroll( n , x , y )函数来模拟。 n 为滚动的像素长度。
还有非必须参数x和y参数,可以在滚动之前定位到(x , y )位置;如果不写x和y那么鼠标将在当前位置进行滚动。
例如:import pyautogui # 向上滚动10像素 pyautogui.scroll(10) # 向下滚动10像素 pyautogui.scroll(-10) # 移动到(100, 100)位置再向上滚动10像素 pyautogui.scroll(10, x=100, y=100) - 按和松键
鼠标的 按和松键 的应用场景和 拖拽 的应用场景类似,可以简单了解一下。
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、对键盘操作
-
输入英文和数字
键盘控制的主要函数就是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这些功能键。 -
按键
要想使用功能键或者字母键,有其他的方法,那就是使用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']) # 按下三次方向键左← -
组合快捷键
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') # 表示松开退出键 -
到底能模拟哪些键?
受限于厂家和系统(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( )于这三个函数的。 -
输入中文
对于中文 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') #使用快捷键粘贴
浙公网安备 33010602011771号