首发于Python杂记
PyAutoGUI——图形用户界面自动化

PyAutoGUI——图形用户界面自动化

PyAutoGUI模块通过屏幕xy坐标系统确定目标位置,控制鼠标和键盘发送虚拟击键和鼠标点击,完成点击按钮、填写表单等操作,在没有模块对应你要操作的无聊任务的时候,也不失为一个不错的选择。


PyAutoGUI的坐标轴系统

pyautogui的鼠标函数使用x,y坐标,原点在屏幕左上角,向右x坐标增加,向下y坐标增加,所有坐标都是正整数,没有负数坐标。如图所示:


pyautogui.size()            #返回屏幕宽高像素数的元组
                            #例如,如果屏幕分辨率为1920*1080,那么左上角的坐标为(0,0),
                            #右下角的坐标是(1919,1079)

I. 控制鼠标

(1)确定鼠标当前位置

pyautogui.position()                 #确定鼠标当前位置,返回x,y坐标的元组


(2)移动

pyautogui.moveTo(x,y[,duration = t])  # 将鼠标移动到屏幕指定位置,
                                      #x,y是目标位置的横纵坐标,duration指定鼠标光标移动到目标位置
                                      #所需要的秒数,t可以为整数或浮点数,省略duration参数表示
                                      #立即将光标移动到指定位置(在PyAutoGUI函数中,所有的duration
                                      #关键字参数都是可选的)
                                      #Attention:所有传入x,y坐标的地方,都可以用坐标x,y
                                      #的元组或列表替代,(x,y)/[x,y]

pyautogui.moveRel(x,y[,duration = t]) #相对于当前位置移动光标,
                                      #这里的x,y不再是目标位置的坐标,而是偏移量,
                                      #如,pyautogui.moveRel(100,0,duration=0.25)
                                      #表示光标相对于当前所在位置向右移动100个像素


(3)点击

完整的点击:按下鼠标按键,然后放开,同时不移动位置

pyautogui.mouseDown()   #按下鼠标按键(左键)

pyautogui.mouseUp()     #释放鼠标按键(左键)

pyautogui.click()       #向计算机发送虚拟的鼠标点击(click()函数只是前面两个函数调用的方便封装)
                        #默认在当前光标位置,使用鼠标左键点击

pyautogui.click([x,y,button='left/right/middle'])  #在(x,y)处点击鼠标左键、右键、中键
                                                   #但不推荐使用这种方法,下面这种方法效果更好
                                                   #pyautogui.moveTo(x,y,duration=t)
                                                   #pyautogui.click()
pyautogui.doubleClick() #双击鼠标左键

pyautogui.rightClick()  #单击鼠标右键

pyautogui.middleClick() #单击鼠标中键

(4)拖动

拖动:按住一个键不放,同时移动鼠标

pyautogui.dragTo(x,y[,duration=t)      #将鼠标拖动到指定位置
                                       #x,y:x坐标,y坐标

pyautogui.dragRel(x,y[,duration=t])    #将鼠标拖动到相对当前位置的位置
                                       #x,y:水平移动,垂直移动

(5)滚动

pyautogui.scroll()         #控制窗口上下滚动(滚动发生在鼠标的当前位置)
                           #正数表示向上滚动,负数表示向下滚动,
                           #滚动单位的大小需要具体尝试


#eg
sleep(2)
click()
moveTo((1418,12),duration=2)
click()
moveTo([1392,47],duration=1)
click()
typewrite('https://wwww.baidu.com')
typewrite(['enter'])

II. 控制键盘

(1)输入字符串

pyautogui.typewrite(s[,duration=t])      #向文本框发送字符串
                                         #可选的duration参数在输入单个字符之间添加短暂的时间暂停
                                         #Attention:只能用于输入英文


(2)输入键字符串

不是所有的键都很容易用单个文本字符来表示。例如,如何把Shift键或左箭头键表示为单个字符串?在PyAutoGUI中,这些键表示为短的字符串值,如'esc'表示Esc键,'enter'表示Enter,我们把这些字符串称之为键字符串。


pyautogui.typewrite([键盘键字符串])      #除了单个字符串,还可以向typewrite()函数传递键字符串的列表
                                         #如 pyautogui.typewrite(['a','b','left','left','X','Y'])
                                         #按'a'键,'b'键,然后按左箭头两次,然后按'X'和'Y'
                                         #输出结果为XYab

pyautogui.keyDown()        #根据传入的键字符串,向计算机发送虚拟的按键(按下)

pyautogui.keyUp()          #根据传入的键字符串,向计算机发送虚拟的释放(释放)

pyautogui.press()          #前面两个函数的封装,模拟完整的击键(按下并释放)


举例:

pyautogui.keyDown('shift');pyautogui.press('4');pyautogui.keyUp('shift')
#按下Shift,按下并释放4,然后释放Shift


完整的键字符串如下:

键盘键字符串                        含义
'a','b','c','A','C','1','2','3',    单个字符的键
'!','@','#'等

'enter'                             回车

‘esc'                              ESC键

'shiftleft','shiftright'            左右Shift键

'altleft','altright'                左右Alt键

'ctrlleft','ctrlright'              左右Ctrl键

‘tab'(or '\t')                     Tab键

'backspace','delete'                Backspace键和Delete键

'pageup','pagedown'                 Page Up 和Page Down键

'home','end'                        Home键和End键

'up','down','left','right'          上下左右箭头键

'f1','f2','f3'等                    F1至F12键

'volumemute','volumeup',volumedown' 静音,放大音量和减小音量键

'pause'                             暂停键

'capslock','numlock','scrolllock'   Caps Lock,Num Lock和 Scroll Lock键

'insert'                            Insert键

'printscreen'                       Prtsc或Print Screen键

'winleft','winright'                左右Win键(在windows上)

'command'                           Command键(在OS X上)

'option'                            Option键(在OS X上)


(3)快捷键组合

pyautogui.hotkey()           #接收多个字符串参数,顺序按下,再按相反的顺序释放


举例:

pyautogui.hotkey('ctrl','c')  #按住Ctrl键,然后按C键,然后释放C键和Ctrl键

相当于

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')

编辑于 2019-03-25 18:16