一、准备工作:
环境安装:
1、创建 环境
打开,创建一个.11的环境:
conda create -n pyGui python=3.11
2、切换到新创建的环境
conda activate pyGui
3、安装第三方库: , -
pip install pyautogui -i https://mirrors.aliyun.com/pypi/simple
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
二、测试环境是否可用
打开创建工程
-> Name:()-> :(D:\\) ->:
->:(pyGui) ->单击 按钮
创建一个文件: .py 导入包并查看屏幕分辨率 :
import cv2 # 没有报错,证明安装成功
import pyautogui
print(pyautogui.size())
# 或者
width, height = pyautogui.size()
print(width, height)
输出:
Size(width=1920, =1080)
1920 1080
三、测试的各项功能1、移动鼠标
·移动鼠标
. (函数将鼠标立即移动到屏幕的指定位置。
x坐标的整数值, 构成了函数的第一个参数, y坐标的整数值, 构成了函数的第二个参数, 用。表示。
整数或者浮点数类型的可选关键字参数, 它指定了把鼠标移动到目的位置所需要的秒数。要是不进行指定的话, 默认值就是零, 此零表示着立即进行移动哟。在函数当中, 所有的关键字参数都是属于可选的。
. 函数相对于当前的位置移动鼠标
那个函数能够接纳三个参数, 其中一个是朝着右边水平方向移动的像素数量, 另一个是朝着下方垂直方向移动的像素数量, 还有一个(属于可选择的情况)是完成移动所耗费的时间。要是给第一个以及第二个参数提供负整数, 那么鼠标就会朝着左边或者上方进行移动。
接下来测试用鼠标移动的代码:
for _ in range(5): # 画 5次
# 利用绝对坐标 测试移动鼠标 (从屏幕中间开始画一个正方形)
pyautogui.moveTo(width / 2, height / 2, duration=0.25)
pyautogui.moveTo(width / 2, height / 2 + 100, duration=0.25)
pyautogui.moveTo(width / 2 - 100, height / 2 + 100, duration=0.25)
pyautogui.moveTo(width / 2 - 100, height / 2, duration=0.25)
pyautogui.moveTo(width / 2, height / 2, duration=0.25)
for _ in range(5):
# 利用相对对坐标 测试移动鼠标 (从当前鼠标位置开始画一个正方形)
pyautogui.moveRel(300, 0, duration=0.25)
pyautogui.moveRel(0, 300, duration=0.25)
pyautogui.moveRel(-300, 0, duration=0.25)
pyautogui.moveRel(0, -300, duration=0.25)
2、获取鼠标的位置
# 获取鼠标位置
current_positoion = pyautogui.position()
print(current_positoion)
x, y = pyautogui.position()
print(x, y)
输出结果:
Point(x=911, y=859)
911 859
3、鼠标单击
# 鼠标点击
pyautogui.click() # 默认当前位置,也可以传入参数 x, y
# 右键点击
pyautogui.click(500,500, button='right')
鼠标点击
要给计算机发送虚拟的鼠标点击操作, 那就调用.方法。在默认情形下, 点击会采用鼠标左键, 点击是在鼠标当下所在的位置发生。要是期望点击在鼠标当前位置之外的地方出现, 那能够传入X、y坐标当作可选的第一、第二参数。
指定鼠标按键
要是打算指定鼠标按键呢,那就去加入关键字参数, 其值分别是’left’, 还有’‘, 或者是’right’。比如说, . click (100。
将会在坐标(100,150)那里, 点击鼠标左键, 此相关操作是150, =‘left’)这样描述规定的。而会在坐标(200,250)之处, 进行点击右键行为, 这一情况是运用的.click (200,250, =‘right’)此模式。
。实现点击的其他方法 . ()
。只是按下鼠标按键 . ()
。只是释放鼠标按键 . ()
。执行双击鼠标左键
. (), . ()
。分别执行双击右键和双击中键
4、拖动鼠标
拖动鼠标
把鼠标移动, 与此同时, 始终按住一个按键, 这就叫做“拖动”。比如说, 能够借助拖动文件图标这种方式, 在文件夹之间对文件进行移动等这类具体的操作。
那啥, 嘿, 提供了那么个啥, 啥啥函娄咧, 把鼠标给拖动, 拖到一个崭新的位置那儿, 或者是相对于当前位置的位置的位置的位置咧哎, 又或者是相对于当前位置呢哎, 接着是相对于当前位置的位置哎, 再或者说是与之相应的, 应该会是一个位置的位置的位置的位置, 把鼠标准确地安顿好。, 和啥还有啥的参数, 跟啥啥和啥啥是一模一样的呀哪: x坐标、也就是所谓的水平移动, y坐标、也就是垂直移动哇呵呵笑一声, 以及还有个可选的时间间隔哦哈, 在OSX这个系统上面咧, 要是鼠标移动的速度太快了, 那拖动起来就是不对劲搞怪, 所以呢嘿, 建议去提供那个啥关键字参数哟嘿嘿嘿。
测试
请开启一个用于绘图的应用程序, 像是在特定操作系统上的Paint, 在OSX系统上的某款应用, 又或是在Linux系统上的GNU Paint , 抑或是当未有供绘图所用软件之时, 能够选用在线绘图方式进而展开操作。
单击我打开网址
( com/))
# 拖动鼠标
time.sleep(2) # 为了等待就位
pyautogui.click()
length = 80
while length > 0:
pyautogui.dragRel(length, 0, duration=0.25, button='left')
length -= 5
pyautogui.dragRel(0, length, duration=0.25, button='left')
pyautogui.dragRel(-length, 0, duration=0.25, button='left')
length -= 5
pyautogui.dragRel(0, -length, duration=0.25, button='left')
注意:如果出现如下报错信息
不是处于(‘左’, ‘’, ‘’)这种情况, 那么在函数之中添加, 参数去指定鼠标按键就行。
5、鼠标滚动
pyautogui.scroll(500) # 正数是向上滚动,负数是向下滚动
滚动鼠标

是 (), 它是最后存在的那个鼠标函数。你把一个需要给出大小的整型参数供应给它, 按由此表现出或者向上或者向下的滚动而进行多少单位的滚动, 滚动是于鼠标当下所在位置之上达成的。
单位的意义于每个操作系统而言是不一样的, 于每种应用来说也是不一样的, 所以你必需进行试验, 瞧瞧在你的情形之下滚动的距离究竟是多远。
传递正整数表示向上滚动,传递负整数表示向下滚动
6、获取屏幕快照
要在那个里面获取屏幕快照, 那就调用那个函数, 那个函数是这样的,它会返回一个包含一个屏幕快照的Image对象。
image = pyautogui.screenshot()
image.save('./屏幕快照.png')
Image 对象 ()
(() 函数把坐标元组当做参数传进去, 它能够告知你在图像里这些坐标位置上的像素颜色。), (() 函数的返回结果是一个 RGB 元组, 这个元组涵盖)
当前屏幕上的内容, 是通过 4 个整数来体现的, 这 4 个整数分别表示像素的红绿蓝值以及透明度, 此即你程序“看到”那内容的方式。
image.getpixel((23,29)) # 获取元组中坐标点的像素值
分析屏幕快照
举个栗子:
以你的 GUI 自动化程序来讲, 存在步骤为点击灰色按钮, 于调用 click () 方法之前, 能够弄来屏幕 快照, 瞧瞧脚本要点击地方的像素, 要是其颜色和灰色按钮不一样, 程序便清楚有问题产生了, 或许窗口有意外移动情况, 又或许弹出式对话框把该按钮给挡住了, 此时, 若是继续下去(有可能点到错误的事物, 导致严重破坏), 程序能够“察觉”自己没点到正确的事物, 进而自行停下。
· 函数
参数:
其一和其二的参数乃整数, 针对×与.y坐标对应, 其三的参数是一个元组, 其中含有3个整数, 此乃屏幕像素务必匹配的RGB颜色。
返回值:
倘若屏幕之上指定的 x 坐标、y 坐标所处位置的像素和指定的颜色相匹配, 那么 () 函数就会返回 True。
image = pyautogui.screenshot() # 获取屏幕快照
print(image.getpixel((329, 329))) # 打印坐标像素值
result = pyautogui.pixelMatchesColor(329, 329, (49, 51, 53)) # 与像素值进行比较
print(result) #输出返回的比较结果
四、测试的功能1、图像识别 简介
是一个基于开源发行的跨平台计算机视觉库, 它达成了图像处理以及计算机视觉方面诸多通用算法的实现, 已然成为计算机视觉领域极为有力的研究工具。 这里的“(Open )”。
在这里我们要区分两个概念:图像处理和计算机视觉的区别:
图像处理着重于对图像展开那种诸如增强、还原、去噪、分割等情形的“处理”。
计算机视觉着重于借助计算机去模拟人的视觉, 所以模拟乃是计算机视觉范畴的终极目标。
· 环境安装:
·pip, 其版本为3.4.5.20。倘若版本过高就会报错, 故而需使用此版本。
五、综合示例完整代码
利用本人写的一个房货计算器单击开始计算进行测试使用方法
WARN:0@2.300
针对.cpp文件的第241行, 由于cv::(关于'./屏幕快照.png'), 无法打开或读取文件, 需检查文件路径。
存在一个需要留意的要点, 那便是读取的文件之中不可含有中文文件, 文件名若是中文同样不行, 会那般出现上面所显示的错误, 因而在进行使用之际, 路径最好尽量不要带有中文。
函数介绍:
1、cv2.(src, , )
参数:
src: 图像格式为 uint8 或者 float32的原图像, 在传入函数时要用中括号括起来, 如下列情况, 比如。
同样用中括号括起来它, 会告知函数我们一幅图像的直方图。要是传入图像是灰度图, 它的值就是那样;要是传入的是彩色图像, 传入的参数可以是那些, 它们分别对应着BGR。
有一种图像叫掩模图像, 把一幅图像的直方图进行统整后它显示为None, 不过要是你打算统整图像某一部分的直方图, 那就要制作一个那样的掩模图像并加以使用。
作用:用于生成图像的频数直方图
2、, , , = cv2.(ret)
参数:
最小值, 此最小值用来表示对应的表示位置 , 而不同位置有着最小值 , 最大值 , 这最大值也表示对应的位置 , 其中ret输入的是矩阵。
作用是, 找出矩阵里头的最大值, 以及最小值, 也就是找出它们各自所对应的, (x, y)这样的位置。
参数:
img: 表示图片
(x, y): 表示矩阵左上角的位置
(x+w. y+h): 表示矩阵右下角的位置
**(0, 0, 255):**表示颜色
**2:**表示线条
作用:用于在图像上画出矩阵
4、什么模板匹配:
模板匹配跟卷积原理相像, 模板于原图像之上自原点起始滑动, 运算模板与 (图像被模板覆盖之处) 的差异程度, 此差异程度的计算方式内里存有6种, 随后把每次演算得出的结果安置到一个矩阵里头, 用以作为结果输出, 倘若原图形是AxB大小, 不过模板是axb大小, 那么输出结果的矩阵便是(A-a+1)x(B-b+1) , 这点要注意。
TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
TM_CCORR:计算相关性,计算出来的值越大,越相关
TM_CCOEFF:计算相关系数,计算出来的值越大,越相关
TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近 0,越相关
TM_CCORR_NORMED:计算归一化相关性,计算出来的值走接近 1,越相关
TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近 1,越相关
实现自动获取按钮位置并单击的完整案例代码:
import cv2
import time
import pyautogui
time.sleep(2) # 首先等2秒 切换界面
# 获取带有房贷计算的屏幕快照保存到本地
image = pyautogui.screenshot()
image.save('Screen.png')
# 基于 cv2读取照片
screen = cv2.imread('Screen.png')
joinMeeting = cv2.imread('StartCal.png') # 该图片为房贷计算的开始计算按钮的截图
# 在屏幕快照中对比开始计算按钮 定位其准确位置
result = cv2.matchTemplate(joinMeeting, screen, cv2.TM_CCOEFF_NORMED)
# result 是一个二维列表,列表中最大值元素的位置就是我们对比后相似度最高的图片【左上角】位置
print(result)
# minMaxLoc 返回一个元组,其中三个元素,以此为最不相似点分数,最相似点分数,最不相似点位置坐标,最相似点位置坐标
pos_start = cv2.minMaxLoc(result)[3] # 获得最相似点相似坐标
print(pos_start)
# x = pos_start[0]
# y = pos_start[1]
# 定位到点击图片的中间位置
x = pos_start[0] + int(joinMeeting.shape[1] / 2)
y = pos_start[1] + int(joinMeeting.shape[0] / 2)
# 暂停1秒后开始点击
time.sleep(1)
pyautogui.click(x, y, button='left')

840

被折叠的 条评论
为什么被折叠?



