目录[-]
一、PyAutoGui是什么?
- PyAutoGui是一个跨平台GUI自动化库。
- PyAutoGUI是一个Python模块,用于以编程方式控制鼠标和键盘。
- PyAutoGUI 可实现控制鼠标、键盘、消息框、截图、定位等功能
- PyAutoGUI 上能挂机刷宝箱,下能自动写文档
二、 PyPutoGUI下载与安装
1.安装python3
具体安装过程可以查看:http://hyf123.cn/blog/detail/5/
2.安装PyAutoGUI
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyautogui
三、PyPutoGUI的使用
1.通用功能
pyautogui.FAILSAFE = True
# 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常
pyautogui.PAUSE = 1
# 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep
pyautogui.size() # 获取屏幕尺寸(分辨率×分辨率)
pyautogui.position() # 获取鼠标当前位置
pyautogui.onScreen(100,200) # 判断坐标是否在屏幕范围内
实例:
import pyautogui, sys # 获取本机分辨率 print("本台计算机分辨率为:",pyautogui.size(),type(pyautogui.size())) # 获取当前鼠标位置 x, y = pyautogui.position() print("目前光标的位置:",pyautogui.position(),type(pyautogui.position())) # 检查XY是否在允许的分辨率内 print(pyautogui.onScreen(0, 0)) # True print(pyautogui.onScreen(1920, 1080)) # False 执行结果: 本台计算机分辨率为: Size(width=1920, height=1080) <class 'pyautogui.Size'> 目前光标的位置: Point(x=971, y=608) <class 'pyautogui.Point'> True False
2.鼠标操作
鼠标的操作大致就三类,点击(click),移动(Move)和拖拽(drag)
鼠标的点击也分为单击、双击、右击,滚轮操作等
pyautogui.move(100,100) #在当前位置鼠标向右移动100,向下移动100
#相当在当前位置移动x,y个像素
# 第一个参数为X方向上的移动,左负右正
# 第二个参数为Y方向上的移动,上负下正
pyautogui.moveTo(100, 200, duration=3, tween=pyautogui.easeInQuad) # 以先快后慢的方式移动到100,200点,耗时3S
# 大致功能和move()相近,但是多了两个参数
# moveTo鼠标光标移至传递的X和Y整数坐标,duration为移动到目标点的指定耗时,tween为移动的方式
# X,Y的坐标假如为浮点数,则向下取整
# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。
# PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。
# 开始很慢,不断加速
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)
# 开始很快,不断减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)
# 一步一徘徊前进
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超过起点和终点
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)
# 按住左键,用2s时间移动到100,200点的位置
pyautogui.dragTo(100, 200, 2, button='left')
# 按住左键,从当前位置向右移动100px,向下移动200px,用时2s
pyautogui.drag(100, 200, 2, button='left')
# 在pyautogui 1.0版本后,drag会取代dragRel
pyautogui.dragRel(100, 200, 2, button='left')
# 除了X,Y坐标以外多了三个参数
# duration:移动所耗时
# tween:移动的方式(先快后慢、先后快中间慢等)
# button: 使用的按键(LEFT、RIGHT)
pyautogui.click() # 鼠标在当前位置进行点击
# clicks: 点击次数,默认1次。次数为2,等于一次双击操作
# interval: 两次点击间隔时长,默认0.0;大于1.0后。默认为点击一次
# duration: 所耗时长,默认0.0。
pyautogui.click(100, 200, clicks=2, interval=0.1, duration=3.0)
# 耗时3S,将鼠标移动到100,200的位置,点击2次,两次点击间隔0.1S
# 也可以传入一个字符串。字符串格式可以为jpg、png等。类似于一个桌面找图,并点击
# 图片一定要和.py文件放在同一个目录下!
pyautogui.click('demo.png')
# 执行鼠标左键单击。
pyautogui.leftClick()
# 执行鼠标右键单击。
pyautogui.rightClick()
# 执行鼠标中键单击。
pyautogui.middleClick()
# 鼠标当前位置左击两下
pyautogui.doubleClick()
# 鼠标在(100,150)位置左击两下
pyautogui.doubleClick(x=100, y=150, button="left")
# 鼠标当前位置左击三下
pyautogui.tripleClick()
# 鼠标左键按下再松开
pyautogui.mouseDown()
pyautogui.mouseUp()
# 按下鼠标右键
pyautogui.mouseDown(button='right')
# 移动到(100, 200)位置,然后松开鼠标右键
pyautogui.mouseUp(button='right', x=100, y=200)
# scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动
# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
pyautogui.scroll(5, 20, 2)
# 向上滚动10格
pyautogui.scroll(10)
# 向下滚动10格
pyautogui.scroll(-10)
# 移动到(100, 100)位置再向上滚动10格
pyautogui.scroll(10, x=100, y=100)
3.键盘操作
import pyautogui pyautogui.typewrite('Hello world!') # 输入Hello world!字符串 pyautogui.typewrite('Hello world!', interval=0.25) # 每次输入间隔0.25秒,输入Hello world! pyautogui.press('enter') # 按下并松开(轻敲)回车键 pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松开(轻敲)四下左方向键 pyautogui.keyDown('shift') # 按下`shift`键 pyautogui.keyUp('shift') # 松开`shift`键 pyautogui.keyDown('shift') pyautogui.press('4') pyautogui.keyUp('shift') # 输出 $ 符号的按键 pyautogui.hotkey('ctrl', 'v') # 组合按键(Ctrl+V),粘贴功能,按下并松开'ctrl'和'v'按键 # pyautogui.KEYBOARD_KEYS数组中就是press(),keyDown(),keyUp()和hotkey()函数可以输入的按键名称 pyautogui.KEYBOARD_KEYS = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
4.消息窗口
示例1:
import pyautogui pyautogui.alert(text='这样很危险哦?', title='警告框', button='OK')
示例2:
import pyautogui pyautogui.confirm(text='您确认要删除我吗?', title='确认框', buttons=['OK', 'Cancel'])
点击确定后,会返回ok,点击取消,返回Cancel
示例3:
import pyautogui pyautogui. prompt(text='请告诉我你明天来吗?!', title='消息框' , default='')
恢复消息后,点击ok会返回输入的内容
示例4:
import pyautogui pyautogui. password(text='请输入密码:', title='密码消息框', default='', mask='*')
输入的密码会加密,但是点击ok后会返回明文密码
5.图像操作
import pyautogui pyautogui.screenshot(r'C:\Users\Admin\demo.png') # 截全屏并设置保存图片的位置和名称 im = pyautogui.screenshot(r'C:\Users\Admin\demo.pn') # 截全屏并设置保存图片的位置和名称 print(im) # 打印图片的属性 # 不截全屏,截取区域图片。截取区域region参数为:左上角XY坐标值、宽度和高度 pyautogui.screenshot(r'C:\Users\Admin\region_demo.png', region=(0, 0, 300, 400)) pix = pyautogui.screenshot().getpixel((220, 200)) # 获取坐标(220,200)所在屏幕点的RGB颜色 positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')' print(positionStr) # 打印结果为RGB:( 60, 63, 65) pix = pyautogui.pixel(220, 200) # 获取坐标(220,200)所在屏幕点的RGB颜色与上面三行代码作用一样 positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')' print(positionStr) # 打印结果为RGB:( 60, 63, 65) # 如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函数,把X、Y和RGB元组值穿入即可 # 如果所在屏幕中(x,y)点的实际RGB三色与函数中的RGB一样就会返回True,否则返回False # tolerance参数可以指定红、绿、蓝3种颜色误差范围 pyautogui.pixelMatchesColor(100, 200, (255, 255, 255)) pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10) # 获得文件图片在现在的屏幕上面的坐标,返回的是一个元组(top, left, width, height) # 如果截图没找到,pyautogui.locateOnScreen()函数返回None a = pyautogui.locateOnScreen(r'C:\Users\Admin\region_demo.png') print(a) # 打印结果为Box(left=0, top=0, width=300, height=400) x, y = pyautogui.center(a) # 获得文件图片在现在的屏幕上面的中心坐标 print(x, y) # 打印结果为150 200 x, y = pyautogui.locateCenterOnScreen(r'C:\Users\Admin\region_demo.png') # 这步与上面的四行代码作用一样 print(x, y) # 打印结果为150 200 # 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出 pyautogui.locateAllOnScreen(r'C:\Users\Admin\region_demo.png') for pos in pyautogui.locateAllOnScreen(r'C:\Users\Admin\region_demo.png'): print(pos) # 打印结果为Box(left=0, top=0, width=300, height=400) a = list(pyautogui.locateAllOnScreen(r'C:\Users\Admin\region_demo.png')) print(a) # 打印结果为[Box(left=0, top=0, width=300, height=400)]