Python使用pyaugui定位不到?来看看如何借点定点

博主这些天一直在处理定位这个问题,我遇到的是对软件中的页面进行操作,但是被封装好的软件,里面的页面部件捕获不到,打个比方如下(因为怕牵扯到别的问题我就拿文本文档比喻,文本文档里面的部件是很容易捕获的,所以这是个比喻,领会意思即可。)

 

我想要让代码来点击这个文件这块,如果是没被封装好的软件,我使用autoit,win32很快就能定位到这边,但是封装好的是捕获不到的,所以我有两种解决方法。

一、使用pyautogui的使用截图来定位

我将文件这块单独的截下来,然后来用pyautogui.locateCenterOnScreen('./XXX/X.png'),在打开文本文档,这样可以直接返回我截的图在我打开的文本文档中它所在的位置,注意这个位置不是返回这块的四点位置,而是这块所在文本文档的中心位置也就是这

我点的这个位置,这样我就可以进行pyautogui自带的点击事件,直接进行点击就实现了。

那么问题带了,用一段pyautogui时间的人会发现这种依靠图片识别的方法不稳定,在不同的电脑下不稳定,那如何提高稳定性呢?我们来引入open-cv中的confidence

我们本来的代码pyautogui.locateCenterOnScreen('./XXX/X.png')

转变为pyautogui.locateCenterOnScreen('./XXX/X.png',confidence=x.x)

这个x.x最大的值是1,值越低模糊匹配的阈值越大,简单说将图片匹配的可能性放大了。

二、借点定位

使用这种方法的前提是找一个稳定的点,打个比方,我们匹配一个位置,如下

这个位置一直匹配不到,我就是想点击一下文件,但是我使用pyautogui一直找不到,返回值一直是不识别Noneobject,这个时候我们可以去找一个稳定的点,我们先观察发现无论我们怎么变动,有一块的位置一直是不变的,如下

那么在这块找到一个最稳定的点,可以在任何分辨率的都不会变化的点,那就是我们想要的

我红色标注的那个点,就是相对于其他的,对我我们找文件这块最方便也是最稳定的点

我们可以使用

a= win32gui.FindWindow(None, "title") #这是先识别窗口

left, top, right, bottom = win32gui.GetWindowRect(a)#然后返回窗口的左上坐标与右下坐标,那么我们想要的是左上这个点,那么我们可以跟据左上这个点进行一个数学计算就是用x减去或者加上某个值来定位,y点减去或者加上某个值来定位,得到的坐标就是我们想要的坐标,我们只是想要点击,一般只要进入点击区域即可,而且我们算的值不是死的,虽然加减的值是死的但是可以在任何分辨率下我们的总是能精准的定位到,因为我们要找的点是基于那个点形成的,而那个点对我我们要找的点的距离是不变的。

打个比方,你现在随便打开文本文档,不论讲其放在那里,改变大小,A与B点的距离从来没变过,如下所示

所以这就是我所谓的借点找点法

点到为止,更多知识,点个关注,敬请期待!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值