【MAC终端UI自动化】pyautogui.click,图像识别定位不准排查

原始代码,点不到图片位置

x,y = pyautogui.locateCenterOnScreen(image='1.png')
pyautogui.click(x,y)

排查一:没有鼠标点击的权限
打开系统偏好设置->安全与隐私->在‘允许下面的APP控制您的电脑’中将终端打上对勾。
验证:

pyautogui.click(0,0)

可以点击到最左上的苹果图标,说明点击方法没有问题,只是点击位置错误。

排查二:分辨率问题
看屏幕尺寸:

#获取图片位置
x,y = pyautogui.locateCenterOnScreen(image='1.png')
print(x,y)
#获取屏幕分辨率
screenWidth, screenHeight = pyautogui.size()
print(screenWidth, screenHeight)

运行结果显示
图片的y,超出屏幕的y
在这里插入图片描述

**最后验证发现,如果需要定位到准确的位置,我们需要将 locateCenterOnScreen() 返回的坐标分别乘上 0.5 ,这样才可以准确定位。

x,y = pyautogui.locateCenterOnScreen(image='1.png')
pyautogui.click(x*0.5,y*0.5)

原因:13.3 英寸的 MacBook 机,屏幕渲染分辨率和实际分辨率不是点对点的关系,猜测可能和内建视网膜显示器有关。

因为自动化脚本要兼容不同的机型,所以需要做判断,屏幕渲染分辨率和实际分辨率不是点对点的关系时,点击(x0,.5,y0.5)
屏幕渲染分辨率和实际分辨率是点对点的关系时,点击(x,y)

举个例子
红框区域是我需要识别的,首次打开软件,会默认放到屏幕正中央,所以软件的菜单栏,一定会在屏幕左侧,所以判断 x 是否小于 屏幕宽度的1/2
这是我

x,y = pyautogui.locateCenterOnScreen(image='1.png',confidence=0.5)
print(x,y)

screenWidth, screenHeight = pyautogui.size()
print(screenWidth, screenHeight)

#判断是否有内建视网膜尺寸,若有,则click(x*0.5,y*0.5),否则正常点击click(x,y)
if x<(screenWidth*0.5):
    pyautogui.click(x,y) 
else :
    pyautogui.click(x*0.5,y*0.5)
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值