目录
-
一.Gui介绍
自动化GUI(图形用户界面)是指通过编程技术实现对图形用户界面操作的自动化过程。在传统的软件测试或数据处理中,人工手动操作界面耗时且容易出错。而自动化GUI利用专门的工具或脚本,模拟人类用户对软件界面的各种交互行为,如点击按钮、输入文本、选择菜单等。它能够按照预设的规则和流程,快速、准确地完成一系列界面操作任务,大大提高了工作效率,尤其在软件测试领域,可以快速验证软件功能是否正常,帮助开发者及时发现并修复问题,确保软件的质量和稳定性
二.学习内容部分
1.图片分辨率(以屏幕分辨率1920*1080为例)
import pyautogui
width, height = pyautogui.size()#获取屏幕分辨率信息
2.鼠标移动的操作
import pyautogui
#pyautogui.moveTo(x,y,time)运动鼠标到(x,y)坐标,time为时间
for i in range(3):
pyautogui.moveTo(100,100,duration=0.25)
pyautogui.moveTo(200,100,duration=0.25)
pyautogui.moveTo(200,200,duration=0.25)
pyautogui.moveTo(100,200,duration=0.25)
#pyautogui.moveRel(x,y,time)以鼠标现在位置为原点,运动鼠标到x,y坐标,time为时间
for i in range(2):
pyautogui.moveRel(100,0,duration=0.25)
pyautogui.moveRel(0,100,duration=0.25)
pyautogui.moveRel(-100,0,duration=0.25)
#获取鼠标当前的位置
x,y=pyautogui.position()
3.鼠标点击
import pyautogui
#pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left')
#x:鼠标点击位置的横坐标,默认值为 None。如果为 None,则使用当前鼠标所在位置的横坐标。
#y:鼠标点击位置的纵坐标,默认值为 None。如果为 None,则使用当前鼠标所在位置的纵坐标。
#clicks:鼠标点击的次数,默认值为 1。
#interval:每次点击之间的间隔时间(秒),默认值为 0.0。
#button:指定点击的鼠标按键,可选值为 'left'(左键,默认值)、'middle'(中键)和 'right'(右键)。
pyautogui.click(100, 100)#到(100,100)位置点击一次
pyautogui.click()#在鼠标位置点击一次
实现点击的其他方法
pyautogui. mouseDown()只是按下鼠标按键
pyautogui.mouseUp()只是释放鼠标按键
pyautogui.doubleClick()执行双击鼠标左键
pyautogui.rightClick(), pyautogui.middleClick()分别执行双击右键和双击中键
4.鼠标拖动
“拖动"意味着移动鼠标,同时按住一个按键不放。例如,可以通过拖动文件图标,在文件夹之间移动文件等,pyautogui 提供了 pyautogui.dragTo() 和 pyautogui.dragRel0 函数,将鼠标拖动到一个新的位置(dragTo())或相对当前位置的位置(dragRel())。 dragTo() 和 dragRel() 的参数与moveTo0 和 moveRel0 相同:x坐标/水平移动,y坐标/垂直移动,以及可选的时间间隔,建议提供时间间隔参数,拖动太快会报错
import pyautogui,time
time.sleep(5)
length = 200
#拖动鼠标
while length > 0:
length += -10
pyautogui.dragRel(length, 0, duration=0.25) # 向右移动
length += -10
pyautogui.dragRel(0, length, duration=0.25) # 向下移动
length += -10
pyautogui.dragRel(-length, 0, duration=0.25) # 向左移动
length += -10
pyautogui.dragRel(0, -length, duration=0.25) # 向上移动
在画图中的拖动的轨迹是这样的
5.鼠标滑轮的滚动
pyautogui中有pyautogui.scroll()函数可以实现滑轮的滚动,向函数提供的参数整数的,正负号表示向下或者向上滚动,但是滚动在不同程序,应用,网页等的实际效果都是不一样的,你得结合自己的实际做调整,而且pyautogui.scroll()就只有一个参数可以传递,没有操作的时间可以调整
import pyautogui,time
#鼠标滚动
time.sleep(2)
pyautogui.scroll(100)#向下滚动100个单位,页面向上移动
pyautogui.scroll(-100)#向上滚动100个单位,页面向下移动
6.屏幕快照
pyautogui中提供了一个截图的函数pyautogui.screenshot(),里面可以传入参数,传入字符串则会将截图快照保存下来,名字是传入的字符串,也可以接收一个包含四个整数的元组 (left, top, width, height)
,分别代表截图区域左上角的 x 坐标、y 坐标,以及截图区域的宽度和高度,后续可以用屏幕快照来做图像识别,找到想找的图像的位置并执行想要的操作
import pyautogui
#屏幕快照
im=pyautogui.screenshot()
im.show()
7.按键操作和快捷键
键盘控制的主要函数就是typewrite()
。这个函数可以实现字符输入。要在两次输入间增加时间间隔,可以用interval
参数。例如:
# 输入Hello world!
pyautogui.typewrite('Hello world!')
# 每次输入间隔0.25秒,输入Hello world!
pyautogui.typewrite('Hello world!', interval=0.25)
pyautogui.typewrite(['H','e','l','l','o'])
如果说需要执行按键操作则需要用到press,press()
函数其实是keyDown()
和keyUp()
函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。
# 按下`shift`键
pyautogui.keyDown('shift')
pyautogui.press('left')
# 松开`shift`键
pyautogui.keyUp('shift')
#和typewrite()函数一样,可以用数组把一组键传入press()
pyautogui.press(['left', 'left', 'left'])
PyAutoGUI提供了hotkey()
函数来绑定若干按键,用来执行快捷键的操作如ctrl+c复制等输入
print(pyautogui.KEYBOARD_KEYS)可以查看有哪些按键可以传入.
#复制的快捷键
pyautogui.hotkey('ctrl', 'v')
end.简单的图片识别和操作
简单的利用opencv来定位符合图片的位置在哪,然后在对应位置进行部分操作,这里我是选了哔哩哔哩PC客户端来操作演示,就是在首页点击搜索栏,输入影月月然后enter查找,可能太快了,让我讲讲
import cv2
import pyautogui,time
import pyperclip
time.sleep(5)#用于我打开桌面准备开始执行程序
#由于我提前准备好了图片就不进行截图操作了,直接读取图片
scream=cv2.imread(r'D:\learning\python_file\image.png') #读取截图图片
find=cv2.imread(r'D:\learning\python_file\find.png') #读取要查找的图片
#查找图片相似的位置
result=cv2.matchTemplate(scream,find,cv2.TM_CCOEFF_NORMED)
#result是一个二维数组,里面存储的是每个像素点的相似度
#minMaxLoc返回的是一个元组,包含四个值,分别是最小值,最大值,最小值的位置,最大值的位置
xy_start=cv2.minMaxLoc(result)[3]#获取最大值的位置
x=xy_start[0]+int(find.shape[1]/2)#获取最大值的位置的x坐标
y=xy_start[1]+int(find.shape[0]/2)#获取最大值的位置的y坐标
time.sleep(1)
pyautogui.click(x,y)#点击鼠标
# 输入文本
pyperclip.copy('影月月')
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
首先将截图和拿来匹配的图片的地址交给cv2,返回一个cv2处理过的对象,然后进行利用cv2中matchTemplate函数进行匹配处理,即在scream中寻找find,返回一个元组,不过多讲述用法,有兴趣了解可以去ai一下.
minMaxLoc返回的是一个元组,包含四个值,分别是最小值,最大值,最小值的位置,最大值的位置,选取最大值就行了,因为得到的坐标是相当与find图片的(0,0)在image图片里的位置,所以处理一下,使选取坐标为匹配图片位置的中心来执行操作
下面是我的图片案例,第一张是find.png图片,第二章是image.png图片,先提醒一下我这里是点开了哔哩哔哩客户端而已,并没有去移动客户端,如果代码和我一样但是执行结果不对,那就是你移动了b站 的窗口,建议你结合前面的内容利用屏幕快照来做
三.结束语
我pyautogui的学习是几天速成的,所以文章多多少少有地方写的不好,请多多谅解.如果有能帮助到你的地方我会非常开心.再次感谢你能看到这里,希望你在成为大佬的路上越走越远
有兴趣继续了解的可以去作者的中文文档里看看
https://github.com/asweigart/pyautogui/blob/master/docs/simplified-chinese.ipynb
我是文档结合b站视频来学习的,我看的视频是下面这个链接
https://www.bilibili.com/video/BV1pFSvYeEcD?vd_source=9bc0eb5655a64ed19d36c158fcf4b2d0