计算机上自动化任务的终极工具就是写程序直接控制键盘和鼠标,这些程序可以控制其他应用,向他们发送虚拟的击键和鼠标点击,就像你自己坐在计算机前与它交互一样,这种技术被称为“图形用户界面自动化”。
GUI自动化的速度非常快,可能导致其他程序跟不上,很可能引起失控。有几种方法可以防止或者回复GUI自动化问题。
- 注销,快捷键ctrl-alt-del。
- 暂停和自动防故障装置。pyautogui.PAUSE变量设置暂停的秒数,非PyAutoGUI指令不会停顿。另一种是自动防故障功能。将鼠标移动到屏幕左上角会产生pyautogui.FailSafeException异常,可以用try和except语句处理这个异常,也可以让异常引起程序崩溃。也可以设置pyautogui.FAILSAFE = False禁止这项功能。
#控制鼠标移动,计算机屏幕坐标:左上角为0,0
import pyautogui
width, height = pyautogui.size()//返回屏幕分辨率
#移动鼠标
pyautogui.moveTo(100, 100, duration=0.25)//duration表示所需秒数,如果不指定,默认为0,表示立即移动
#相对移动
pyautogui.moveRel(100, 0 , duration=0.25)
#获取鼠标位置
pyautogui.position()
#控制鼠标交互
#点击鼠标
pyautogui.click()//获取焦点
pyautogui.click(100, 150, button='left')//关键字为left,middle,right
#拖动鼠标, 可以在画图程序中运行测试
pyautogui.dragTo(100, 100, duration=0.25)
pyautogui.dragRel(100, 100, duration=0.25)
#滚动鼠标
pyautogui.scroll(200)//滚动多少单位,最好自己测试一下实际距离,正数向上滚动,负数向下滚动
#获取屏幕快照,linux需要安装scrot才能使用pyautogui的屏幕快照功能
im = pyautogui.screenshot()//Image对象
im.getpixel((0,0))//(0,0)处的像素值, 返回RGB元组
#分析屏幕快照
pyautogui.pixelMatchesColor(50, 200, (130, 135, 144))//查看屏幕上指定坐标的像素与指定的颜色是否匹配
#如果不知道实现应该点哪里,可以使用图像识别
#要识别的图像为参数,返回屏幕上首次发现该图像时左边的x,y,宽度和高度元组。
#要完全匹配,差一个像素也不行
x, y, width, height = pyautogui.locateOnScreen('submit.png')
#如果屏幕上有多处,函数会返回一个Generator对象,可以将其传给list
list(pyautogui.locateAllOnScreen('submit.png'))
#获取区域中心,然后点击
x, y = pyautogui.center((x,y,width,height))
pyautogui.click((x, y))
#控制键盘,按键之前记得先获取焦点
pyautogui.click();pyautogui.typewrite("hello world")
#传递按键列表
pyautogui.typewrite(['a','esc','shiftleft','tab','pause','enter'])
#按下和释放键盘,按下shift,按下4并释放4,释放shift
pyautogui.keydown('shift');pyautogui.press('4');pyautogui.keyup('shift')
#typewrite适合打字符串,press适合打单个字符
#热键组合
pyautogui.keydown('ctrl');pyautogui.keydown('c')
pyautogui.keyup('c');pyautogui.keyup('ctrl')
#一种更简单的方式是hotkey函数
pyautogui.hotkey('ctrl', 'c')
使用场景
可以自动填表,或者是网页游戏的自动任务,只要是重复性的点鼠标键盘的事都能做