Pyautogui TypeError:“NoneType”对象不可迭代

2024-03-01

我正在尝试使用locateCenterOnScreen()PyAutoGUI 的功能,但是它会引发:

Traceback (most recent call last):
  File "C:\Users\windows\Desktop\asd.py", line 3, in <module>
    buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg')
TypeError: 'NoneType' object is not iterable

我的代码是:

import pyautogui

buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg')
pyautogui.doubleClick(buttonx,buttony)

我该如何解决这个问题?


来自 Pyautogui 的文档here http://pyautogui.readthedocs.io/en/latest/screenshot.html#the-locate-functions,当在屏幕上找不到图像时,locateCenterOnScreen 方法将返回 None。

请注意,您正在从此方法中查找 2 个结果,但 None 只是一个结果(因为该方法通常返回两个结果,这对我来说似乎是糟糕的设计 - 它应该引发异常,或者至少返回一个包含两个结果的元组)无对象)。

看下面的例子,这基本上就是你所发生的事情:

>>> foo,bar = None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable

在我看来,解决这个问题最简单、最 Pythonic 的方法就是简单地尝试并捕获它:

try:
    buttonx,buttony = pyautogui.locateCenterOnScreen('who.jpg')
except TypeError:
    """ Do something to handle the fact that the image was not found"""

编辑: 为了回答您在评论中提出的问题,似乎对该库的工作原理或它在屏幕上找到的内容存在误解。您可以通过一些图像向图书馆提供其需要查找的内容的表示。当图像是无损的时,效果会更好,因为这样它就是精确的、逐像素的表示。然后,图书馆会在您的计算机屏幕上搜索所提供的图像所代表的实际事物。正如您所提出的担忧,它不会找到 jpeg 或 png。它找到实际渲染的对象。因此,如果您截取桌面上网络浏览器图标的屏幕截图,它会从该屏幕截图中找到实际的图标并单击它,但前提是该图标可见。如果它在其他窗户或其他东西后面,它就找不到它。它不会在屏幕上搜索图标文件,而是搜索图标本身的渲染。因此,例如,如果您向库提供了实际的 .ico 文件,那么如果它被另一个窗口覆盖,它将无法找到该图标,即使该图标是技术上在您的桌面上,因为它当前尚未呈现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyautogui TypeError:“NoneType”对象不可迭代 的相关文章

随机推荐