python GUI自动操作总结

一、准备工作:

环境安装:

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)   # 正数是向上滚动,负数是向下滚动

滚动鼠标

pyautogui环境安装教程_Python GUI自动化_opencv-python鼠标操作

是 (), 它是最后存在的那个鼠标函数。你把一个需要给出大小的整型参数供应给它, 按由此表现出或者向上或者向下的滚动而进行多少单位的滚动, 滚动是于鼠标当下所在位置之上达成的。

单位的意义于每个操作系统而言是不一样的, 于每种应用来说也是不一样的, 所以你必需进行试验, 瞧瞧在你的情形之下滚动的距离究竟是多远。

传递正整数表示向上滚动,传递负整数表示向下滚动

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值