首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pyautogui找不到我的图片,虽然代码看起来还不错?

为什么pyautogui找不到我的图片,虽然代码看起来还不错?
EN

Stack Overflow用户
提问于 2021-06-26 15:19:11
回答 1查看 228关注 0票数 0

所以我的程序应该做的是在默认的应用程序窗口中找到Mozilla Firefox,然后点击它,并将其更改为Brave Browser。虽然我已经查看了文档,我看到我的代码中的一切都是应该的,但我总是收到这个错误:

代码语言:javascript
复制
File "g:\Default-Browser\main.py", line 9, in <module>
    x, y = pyautogui.locateCenterOnScreen('G:\Default-Browser\mozilla.png')
TypeError: cannot unpack non-iterable NoneType object

下面是我的代码:

代码语言:javascript
复制
import pyautogui 
from time import sleep

pyautogui.press("win")
sleep(.2)
pyautogui.typewrite("default")
sleep(.1)
pyautogui.press("enter")
x, y = pyautogui.locateCenterOnScreen('G:\Default-Browser\mozilla.png')
pyautogui.moveTo(x, y)
pyautogui.click(x, y)
sleep(.3)
x, y = pyautogui.locateCenterOnScreen(['G:\\Default-Browser\\brave.png'])
pyautogui.click(x, y)
pyautogui.hotkey('alt', 'f4')
quit()
EN

回答 1

Stack Overflow用户

发布于 2021-07-09 05:11:04

图像未被检测到,因此python不可能解压变量。您的代码只运行一次图像检测,并且,当尝试自动化GUI过程时,加载时间可能随动画、计算机速度等而变化,只检测一次通常不是一个好主意。而且,它不是100%可靠的,它可能需要更多的尝试。当自动化一个过程时,我总是使用一个循环,直到检测到图像。您可以创建一个如下所示的函数:

代码语言:javascript
复制
def detect_image(path, duration=0):
    while True:
        image_location = pyautogui.locateCenterOnScreen(path)
        if image_location:
            pyautogui.click(image_location[0], image_location[1], duration=duration)
            break

这样,你就不会得到这个错误,如果它花了很长时间,由于某种原因找不到图像,那么你可能应该重新拍摄屏幕截图。

另一方面,如果您认为图像每次都会稍有不同,那么可以在pyautogui.locateCenterOnScreen方法中使用confidence参数。置信度越低,越有可能检测到更多不同的图像。但是,如果您将置信度设置得太低,它可能会检测到误报(图像不是您实际正在寻找的图像)。因此,您应该意识到降低置信度可能会产生一些问题。代码如下所示:

pyautogui.locateCenterOnScreen('image.png', confidence=0.5)

请记住,要使用此功能,您必须使用以下pip命令安装opencv:pip install opencv-python

最后,如果要从图片中删除颜色,并检测始终保持不变但颜色发生变化的图像,则可以将grayscale参数传递给pyautogui检测方法,该方法会将图像转换为黑白图像,然后进行检测。就像这样:

pyautogui.locateCenterOnScreen('image.png', grayscale=True)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68140109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档