今天介绍一个很有用的python库——Pyautogui,它可以通过屏幕的xy坐标系统来确定目标位置,进而控制鼠标和键盘发送虚拟的点击和输入任务。这对于你要完成机械重复枯燥的电脑操作来说非常地方便。
安装Pyautogui库很简单,命令窗口输入:
pip install pyautogui
1 Pyautogui的坐标轴系统
Pyautogui的鼠标函数使用想x,y坐标,原点在屏幕的左上角,向右为x轴正方向,向下为y轴正方向。知道了这个就可以任意定位屏幕上的点啦。
不过,想要准确知道屏幕上的坐标也不是一件容易的事,这里推荐一个超级好用的工具——FastStone Capture 。这个小工具除了定位坐标,还能各种花式截图,包括形状截图,滚动截图,并且还能录制屏幕,取色。
2 控制鼠标
(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() #控制窗口上下滚动(滚动发生在鼠标的当前位置) #正数表示向上滚动,负数表示向下滚动, #滚动单位的大小需要具体尝试
点击鼠标的动作最好跟time.sleep使用,来控制点击速度,不然太快不好掌握。最近我DEFORM要计算的DB文件太多了,为了赶时间,我想让程序晚上也能计算。但我要睡觉啊,所以就写了下面一个很简单的例子。
import pyautogui as ptimport timei = 1pt.moveTo(422,141) #移动到第一个DB文件处time.sleep(2) #停顿2spt.click(button='left') #选中DB文件while i<11: #11个DB文件 pt.moveTo(756,69) #移到运算按钮 time.sleep(2) #停顿2s pt.click(button='left') #点击运算按钮 pt.moveTo(950,545) #移到确定按钮 pt.click(button='left') #点击确定按钮 time.sleep(1800) #等待DEFORM一个DB文件算完 pt.moveTo(422,141+i*21) #移到下一个DB time.sleep(2) pt.click(button='left') #点击下一个DB i+=1
3 控制键盘
(1)输入字符串
直接通过typewrite方法输入字符串,这种方法不能输入中文,不过可以通过切换成中文输入法达到输入中文的目的。
pyautogui.typewrite(s[,duration=t]) #向文本框发送字符串 #可选的duration参数在输入单个字符之间添加短暂的时间暂停 #Attention:只能用于输入英文
切换中文输入法后输入下面代码,能打出"王"字,当然还要配合enter键使用。
pt.typewrite('wang')
(2)输入键字符串
用来输入Shift键、ESC键、箭头键等不能通过字符文本来输入的
pyautogui.typewrite([键盘键字符串]) #除了单个字符串,还可以向typewrite()函数传递键字符串的列表 #如 pyautogui.typewrite(['a','b','left','left','X','Y']) #按'a'键,'b'键,然后按左箭头两次,然后按'X'和'Y' #输出结果为XYabpyautogui.keyDown() #根据传入的键字符串,向计算机发送虚拟的按键(按下)pyautogui.keyUp() #根据传入的键字符串,向计算机发送虚拟的释放(释放)pyautogui.press() #前面两个函数的封装,模拟完整的击键(按下并释放)
注意,输入键盘字符串的时候括号里面的中括号不能少,不然就变成输入字符串了,keyUp,keyDown,press方法是模拟按键盘的操作达到输入字符。同样,也可以通过切换中文输入法来输入中文。比如下面的代码可以打出一个"玩"。
pt.keyDown('w')pt.keyDown('a')pt.keyDown('n')
只能一个一个拼音输入,略显麻烦!
完整键字符串:
键盘键字符串 含义'a','b','c','A','C','1','2','3', 单个字符的键'!','@','#'等'enter' 回车'esc' ESC键'shiftleft','shiftright' 左右Shift键'altleft','altright' 左右Alt键'ctrlleft','ctrlright' 左右Ctrl键'tab'(or '') 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('ctrl','c') #按住Ctrl键,然后按C键,然后释放C键和Ctrl键 #相当于pyautogui.keyDown('ctrl')pyautogui.keyDown('c')pyautogui.keyUp('c')pyautogui.keyUp('ctrl')