💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# PyAutoGUI——图形用户界面自动化 PyAutoGUI模块通过屏幕xy坐标系统确定目标位置,控制鼠标和键盘发送虚拟击键和鼠标点击,完成点击按钮、填写表单等操作,在没有模块对应你要操作的无聊任务的时候,也不失为一个不错的选择。 ## **PyAutoGUI的坐标轴系统** pyautogui的鼠标函数使用x,y坐标,原点在屏幕左上角,向右x坐标增加,向下y坐标增加,所有坐标都是正整数,没有负数坐标。如图所示: ![](https://img.kancloud.cn/9e/66/9e6642f6ef58cdb52e95cc45de2d5cd6_720x429.png)~~~text pyautogui.size() #返回屏幕宽高像素数的元组 #例如,如果屏幕分辨率为1920*1080,那么左上角的坐标为(0,0), #右下角的坐标是(1919,1079) ~~~ ## **I. 控制鼠标** **(1)确定鼠标当前位置** ~~~text pyautogui.position() #确定鼠标当前位置,返回x,y坐标的元组 ~~~ **(2)移动** ~~~python 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)点击** 完整的点击:按下鼠标按键,然后放开,同时不移动位置 ~~~text 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)拖动** 拖动:按住一个键不放,同时移动鼠标 ~~~text pyautogui.dragTo(x,y[,duration=t) #将鼠标拖动到指定位置 #x,y:x坐标,y坐标 pyautogui.dragRel(x,y[,duration=t]) #将鼠标拖动到相对当前位置的位置 #x,y:水平移动,垂直移动 ~~~ **(5)滚动** ~~~text pyautogui.scroll() #控制窗口上下滚动(滚动发生在鼠标的当前位置) #正数表示向上滚动,负数表示向下滚动, #滚动单位的大小需要具体尝试 ~~~ ~~~text #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)输入字符串 ~~~text pyautogui.typewrite(s[,duration=t]) #向文本框发送字符串 #可选的duration参数在输入单个字符之间添加短暂的时间暂停 #Attention:只能用于输入英文 ~~~ (2)输入键字符串 不是所有的键都很容易用单个文本字符来表示。例如,如何把Shift键或左箭头键表示为单个字符串?在PyAutoGUI中,这些键表示为短的字符串值,如'esc'表示Esc键,'enter'表示Enter,我们把这些字符串称之为键字符串。 ~~~text pyautogui.typewrite([键盘键字符串]) #除了单个字符串,还可以向typewrite()函数传递键字符串的列表 #如 pyautogui.typewrite(['a','b','left','left','X','Y']) #按'a'键,'b'键,然后按左箭头两次,然后按'X'和'Y' #输出结果为XYab pyautogui.keyDown() #根据传入的键字符串,向计算机发送虚拟的按键(按下) pyautogui.keyUp() #根据传入的键字符串,向计算机发送虚拟的释放(释放) pyautogui.press() #前面两个函数的封装,模拟完整的击键(按下并释放) ~~~ 举例: ~~~text pyautogui.keyDown('shift');pyautogui.press('4');pyautogui.keyUp('shift') #按下Shift,按下并释放4,然后释放Shift ~~~ 完整的键字符串如下: ~~~text 键盘键字符串 含义 '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)快捷键组合 ~~~text pyautogui.hotkey() #接收多个字符串参数,顺序按下,再按相反的顺序释放 ~~~ 举例: ~~~text pyautogui.hotkey('ctrl','c') #按住Ctrl键,然后按C键,然后释放C键和Ctrl键 相当于 pyautogui.keyDown('ctrl') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('ctrl') ~~~ # **案例** # PyAutoGUI这个库,可自动化控制鼠标键盘 PyAutoGUI 不知道你有没有用过,它是一款用Python自动化控制键盘、鼠标的库。但凡是你不想手动重复操作的工作都可以用这个库来解决。 比如,我想半夜时候定时给发个微信,或者每天自动刷页面等操作,它能完全模拟手动操作,而你可以安心的刷剧了。 嗯,懒惰是程序员的美德。 ### 安装pyautogui ~~~text pip install pyautogui ~~~ ### 键盘鼠标控制 ~~~python3 >>> import pyautogui >>> screenWidth, screenHeight = pyautogui.size() # 返回屏幕分辨率 >>> currentMouseX, currentMouseY = pyautogui.position() # 返回鼠标的所在位置 >>> pyautogui.moveTo(100, 150) #移动鼠标到指定位置 >>> pyautogui.click() # 单击 >>> pyautogui.click(200, 220) # 单击指定位置 >>> pyautogui.move(None, 10) # 移动鼠标10个像素 >>> pyautogui.doubleClick() # 双击鼠标 >>> pyautogui.write('Hello world!', interval=0.25) # 输入字符串,每个字符停留时间0.25秒 >>> pyautogui.press('esc') # 退出键 >>> pyautogui.keyDown('shift') # Shitf键盘 >>> pyautogui.hotkey('ctrl', 'c') # 组合键 ~~~ 用pyautogui自动画图 ![](https://img.kancloud.cn/dc/8f/dc8f1d9adfb5dfc98aa09d72f219f3e9_1920x1080.png) ### 显示消息盒子 除了可以控制鼠标键盘外,还可以调用系统弹窗 ![](https://img.kancloud.cn/c2/e7/c2e76631cc9991fcdd4bc74b56c4da17_630x181.png) ~~~text >>> import pyautogui >>> pyautogui.alert('This is an alert box.') 'OK' >>> pyautogui.confirm('Shall I proceed?') 'Cancel' >>> pyautogui.confirm('Enter option.', buttons=['A', 'B', 'C']) 'B' >>> pyautogui.prompt('What is your name?') 'Al' >>> pyautogui.password('Enter password (text will be hidden)') 'swordfish' ~~~**截屏** 截图是使用的Pillow模块实现的,截图的用处在于通过图片识别技术识别图片内容,然后通过内容精准定位到某个元素的位置,实现精准点击。 ~~~text >>> import pyautogui >>> im1 = pyautogui.screenshot() >>> im1.save('my_screenshot.png') >>> im2 = pyautogui.screenshot('my_screenshot2.png') ~~~ 发布于 2020-08-17