繁体   English   中英

为什么 PyAutoGui LocateOnScreen() 只返回 None

[英]Why PyAutoGui LocateOnScreen() only Returns None

这是我尝试运行的代码:

import pyautogui
r=pyautogui.locateOnScreen('C:\Users\David\Desktop\index.png',grayscale=False)
print r

它必须是像素完美匹配才能被找到。 为了允许任何类型的偏差,您可以调用置信度参数。

例如:

loc = pyautogui.locateOnScreen(image, grayscale=True, confidence=.5)

但是,为了使用置信度参数,您必须安装 opencv_python。 这很容易用 pip 安装:

./python -m pip install opencv_python

到位后,您应该能够解释细微的差异。

我有类似的问题。

我的错是我先将比较图片保存为 jpg,然后在 MS Paint 中保存为 png。

请务必将比较图片保存为 png 格式。 在此之后,定位功能对我有用。

我遇到了同样的问题,我所做的是

import pyautogui 
r= None 
while r is None:
    r=pyautogui.locateOnScreen('C:\Users\David\Desktop\index.png',grayscale=False)
print r

我认为这只是因为定位图像需要时间。 如果您找到了更好的解决方案,请与我分享:)

如果在屏幕上找不到图像, locateOnScreen()函数将返回None 请记住,匹配必须是像素完美的才能匹配它,因此请务必将 index.png 裁剪为最小的可识别大小,以防止额外的细节破坏您的匹配。 此外,请确保您正在寻找的东西没有被它上面的任何其他窗口遮挡。

我通过使用以下方法得到了这个工作:

r = None
while r is None:
    r = pyautogui.locateOnScreen('rbin.PNG', grayscale = True)
print icon_to_click + ' now loaded'

关键是让灰度=真。

这是我要运行的代码:

import pyautogui
r=pyautogui.locateOnScreen('C:\Users\David\Desktop\index.png',grayscale=False)
print r

我有同样的问题并不断返回 None 值。

我做了几次试验,找到了适合我的解决方案。 操作系统:MacOS

我用我的系统截图工具(command+shift+5)保存了照片并保存。 它似乎与我的屏幕上显示的像素信息不同。 因此,我使用 pyautogui 屏幕截图来保存我想要的照片。

pyautogui.screenshot('num7_.png', region=(260,360, 110, 100))

之后,无论灰度参数如何,它都运行良好。

pyautogui.locateOnScreen('num7_.png')
Box(left=260, top=360, width=110, height=100)

我遇到了这个问题,但后来我将照片裁剪到特定部分,然后它正在定位,是的,这需要时间。

或者这也可以工作。

b = pyautogui.center('calc7key.png')

我找到了解决问题的方法。 只搜索尽可能小的图像。 3 秒后找到只有 1 个像素的图片。 当我尝试搜索超过 500x500 的图像时,它什么也找不到。

我认为库pyautogui需要几个识别点。 例如,计算器上的数字七:

在此处输入图片说明

Windows 10 计算器上的数字 7。在这种格式中,我在屏幕上找到了位置。 谢谢您的意见

官方文档说;

The Locate Functions
NOTE: As of version 0.9.41, if the locate functions can’t find the provided image, 
they’ll raise ImageNotFoundException instead of returning None.

因此,您可以决定是否引发异常。 此外,您应该尝试有限次数而不是While True循环。

retry_counter = 0
while retry_counter < 5:
    try:
        result = pyautogui.locateOnScreen(IMAGE_PATH_TO_FIND)
        if result:
            time.sleep(1)
            retry_counter = 10  # to break the loop
    except:
        time.sleep(1)  # retry after some time, i.e. 1 sec
        retry_counter += 1

我的问题是我试图剪下计算器按钮。 这必须进行不同的像素匹配,因为我在这里尝试了所有其他选项,但没有任何效果。 我做了一个打印屏幕,然后将它裁剪到我想要的按钮上并且它起作用了。

import pyautogui
image = '9.png'
loc = pyautogui.locateOnScreen(image, grayscale=True, confidence=.5)
print (loc)

错误:

None
>>>

解决方案

import pyautogui
import time
time.sleep(5)
image = '9.png'
loc = pyautogui.locateOnScreen(image, grayscale=True, confidence=.5)
print (loc)

总结:只需添加以下两行:

import time
time.sleep(5)

输出

Box(left=1686, top=248, width=70, height=47)
>>> 
import time
time.sleep(5)

如果您使用截图工具截取了屏幕截图,它将无法工作,因此请使用“prt sc”或命令提示符进行截图。 这对我有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM