不同的操作系统下安装pyautogui模块的复杂程度是不同的。
在Windows上 直接pip install pyautogui
但在OS X和Linux上安装就比较麻烦,需要先安装一些依赖库
在OS X上
sudo pip3 install pyobjc-framework-Quartz
sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
pip3 install pyautogui
在Linux上
sudo pip3 install python3-xlib
sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev
pip3 install pyautogui
——
在pyautogui中,如果要想控制鼠标,那么首先得追踪到鼠标在屏幕上的位置,也就是说你必须知道在pyautogui中采取了怎样的做坐标系统,那就是我们常见的x,y坐标系。
——
首先要知道为啥要做好安全措施。
基于以上情况普遍的发生,所以我们要提前做好一些安全措施,避免翻车。
安全措施一:暂停等待
pyautogui.PAUSE = 1
每个PyAutoGUI函数调用在执行动作之后,都会等待1秒;非PyAutoGUI指令不会停顿。
安全措施二:自动防故障
pyautogui.FAILSAFE = True
将鼠标移动到屏幕的左上角,这将导致pyautogui产生pyautogui.FailSafeException异常,再通过try和except语句进行处理,从而停止程序。
整体代码如下:
import pyautogui
pyautogui.PAUSE = 1
pyautogui.FAILSAFE = True
首先我们来认识一些PyAutoGui函数方法,如何让鼠标自己移动、点击、拖动和滚动起来。
——
【01】pyautogui.size() 返回屏幕的宽和高像素数
import pyautogui
print(pyautogui.size())
width,height = pyautogui.size()
print(width,height)
程序运行结果
【02】pyautogui.moveTo()/.moveRel() 实现鼠标移动
import pyautogui
# pyautogui.moveTo() 绝对位置移动(移动到指定坐标)
for i in range(10):
pyautogui.moveTo(100,100,duration=0.25) # duration指定鼠标移到目的位置所需的秒数
pyautogui.moveTo(200,100,duration=0.25)
pyautogui.moveTo(200,200,duration=0.25)
pyautogui.moveTo(100,200,duration=0.25)
#pyautogui.moveRel() 相对位置移动(基于目前鼠标位置进行移动)
for i in range(10):
pyautogui.moveRel(100,0,duration=0.25)
pyautogui.moveRel(0,100,duration=0.25)
pyautogui.moveRel(-100,0,duration=0.25)
pyautogui.moveRel(0,-100,duration=0.25)
程序运行起来就是这酱紫滴!(注意看中间光标)
【03】pyautogui.position() 返回鼠标当前位置
import pyautogui
print(pyautogui.position())
【01】pyautogui.click() 点击鼠标
点击鼠标的骚操作有很多种!
pyautogui.click() # 当前位置点击书包
pyautogui.click(100,200,button='left') # 点击指定坐标鼠标左键,参数有left、middle、right
pyautogui.mouseDown() # 按下鼠标
pyautogui.mouseUp() # 释放鼠标
pyautogui.doubleClick() # 鼠标左键双击
pyautogui.rightClick() # 鼠标右键单击
pyautogui.middleClick() # 鼠标中键单击
【02】pyautogui.dragTo()/.dragRel() 拖动鼠标
这里可以参照moveTo()/moveRel()的用法
import pyautogui, time
print('5 second til it starts')
time.sleep(5)
pyautogui.click() # 点击画图工具中获取焦点
distance = 300
shrink = 20
while distance > 0:
pyautogui.dragRel(distance, 0, duration=0.1) # 向右移动
distance = distance - shrink
pyautogui.dragRel(0, distance, duration=0.1) # 向下移动
pyautogui.dragRel(-distance, 0, duration=0.1) # 向左移动
distance = distance - shrink
pyautogui.dragRel(0, -distance, duration=0.1) # 向上移动
可以打开画图工具,运行起来试试鸭!是不是比自己这个手残要好得多。
【03】pyautogui.scroll() 滚动鼠标
import pyautogui
pyautogui.scroll(200) # 正数向上滚动
pyautogui.scroll(-300) # 负数向下滚动
知道如何让鼠标自己旋转跳跃之后,我们再来了解一下如何控制键盘自动实现文本输入、键盘按压以及各种快捷键的使用。
——
【01】pyautogui.typewrite() 输入字符串信息
import pyautogui,time
time.sleep(5)
pyautogui.click((361,266)) # 鼠标在记事本上获得焦点
pyautogui.typewrite('Hello world!','0.25') # 输入字符串,每个字符之间间隔0.25秒
运行起来试一试
【02】pyautogui.keyDown()/.keyUp()/.press() 按压键盘
import pyautogui
pyautogui.keyDown('shift') # 按下Shift
pyautogui.press('4') # 按下并松开4
pyautogui.keyUp('shift') # 松开Shift
【03】pyautogui.hotkey() 快捷键使用
依次传入快捷键的键名字符串,pyautogui.hotkey(key1,key2,key3,...)
按照顺序按下给定键,然后以相反的顺序释放
import pyautogui
def commentAfterDelay():
pyautogui.click(100,100)
pyautogui.typewrite('In IDLE, Alt-3 comments out a line.')
time.sleep(2)
pyautogui.hotkey('alt','3')
commentsAfterDelay()
有些时候,我们想要进行GUI自动化操作,光靠坐标系定位还是不够的,因为可能会出现多种多样的原因导致我们所需定位的目标元素并不在我们所认为的那个坐标上。
比如软件、浏览器等界面大小变化,或者突然出点弹窗等等。
所以我们就需要对整个当面页面进行识别,通过判断元素的RGB值与我们所期待的是否一致,从而来寻找到目标对象。
这就是在pyautogui中进行屏幕处理和图像识别的机制。
——
这里主要涉及三个方法
pyautogui.screenshot()
获得当前屏幕快照的Image对象gepixel((x,y))
返回(x,y)坐标的RGB元组pyautogui.pixelMatchesColor()
判断坐标处RGB是否匹配import pyautogui
im = pyautogui.screenshot() # 获得屏幕快照
im.getpixel((50,200)) # 返回该坐标的RGB
# RGB(130,135,144)
pyautogui.pixelMatchedColor(50,200,(130,135,144)) # 验证指定坐标是否与参数中的RGB值相匹配
# True
pyautogui.pixelMatchedColor(50,200,(131,135,144)) # 验证指定坐标是否与参数中的RGB值相匹配
# False 就算一小点的不一致,都会无法匹配
——
如果我们并不知道鼠标该点击哪里,就可以通过图像识别,向PyAutoGui提供希望点击的图像,让它自己在当前屏幕找到坐标。
pyautogui.locateOnScreen()
返回在屏幕上首次发现的图像的左上角x,y坐标,以及图像宽高(一个元组);如果找不到则返回None;如果找到多个,可以通过list(),返回其元组的列表pyauto.center()
返回图像的中心坐标import pyautogui
list(pyautogui.locateOnScreen('submit.png')) # 返回屏幕上发现该图像的顶点坐标和宽高
#(643,745,70,29)
pyautogui.center((643,745,70,29)) # 返回图像的中心坐标
#(678,759)
pyautogui.click((678,759)) # 鼠标左键点击