鱼C论坛

 找回密码
 立即注册
查看: 301|回复: 14

[已解决]pyautogui

[复制链接]
发表于 2024-9-14 10:36:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
if pyautogui.locateOnScreen('abc2.png.png'):
    print('找到了')
else:
    print('没找到')


各位大佬找不到图片干吗,不会打印没找到
最佳答案
2024-9-15 11:04:22
修改前报错的原因是没有找到图片文件,修改后报错的原因是没有在屏幕上找到图片。我查阅了 pyautogui 的官方文档,发现有一个更新影响了 locateOnScreen 函数。
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.

提示:自 0.9.41 版本起,如果用来定位图片位置的函数找不到提供的图片,它们将会引发 ImageNotFoundException 错误,而不是返回 None 。
原文出处:https://pyautogui.readthedocs.io/en/latest/screenshot.html

因此,你必须使用 try 语句捕获异常,不能使用 if 语句
import pyautogui
print("程序开始执行")

try:
    location = pyautogui.locateOnScreen('QQ.png', confidence=0.9)
    print("图片检测完成")
except ImageNotFoundException:
    print('没找到')
else:
    print('找到了')
屏幕截图 2024-09-14 103529.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-9-14 10:42:40 | 显示全部楼层
本帖最后由 很纯很暧昧 于 2024-9-14 10:44 编辑
import pyautogui
import time


if pyautogui.locateOnScreen('abc2.png'):
    print('找到了')
else:
    print('没找到')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 10:43:02 | 显示全部楼层
你好,鱼油!你这个代码看上去没有什么明显错误,但有可能是以下几个原因导致找不到图片:

1. **图片未更新**:可以尝试确保截图是最新的,并且路径是正确的。
2. **屏幕分辨率或缩放因素**:确保截图和实际显示的一致。
3. **图片格式或名称错误**:检查图片文件名是否正确,例如 "abc2.png.png" 是否有重复的 "png"。
4. **延迟加载**:有可能屏幕上的元素还没加载出来,可以尝试加个延迟:
import pyautogui
import time

time.sleep(2)  # 加个延迟,等2秒
if pyautogui.locateOnScreen('abc2.png'):
    print('找到了')
else:
    print('没找到')

试试这些方法,如果有问题可以再来问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-14 10:47:20 | 显示全部楼层
我想找不到图片的情况下,输出找不到,为什么它不输出没找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 10:47:27 | 显示全部楼层
很纯很暧昧 发表于 2024-09-14 10:47
我想找不到图片的情况下,输出找不到,为什么它不输出 ...


你好,鱼油!如果找不到图片却没有输出“没找到”,可能是因为有异常情况导致程序没有正常执行到`else`语句。你可以通过以下步骤逐步找出问题:

1. **确保图片路径正确**:确认你的图片文件名和路径都正确。

2. **加入调试信息**:在代码中加入一些打印语句,帮助了解程序是否按预期执行。

3. **使用try-except捕获异常**:捕获可能的异常,确保程序不会因异常中断。

下面是修改后的代码,加入了调试信息和异常捕获:
import pyautogui
import time

try:
    print("程序开始执行")
    time.sleep(2)  # 加个延迟,等2秒
    location = pyautogui.locateOnScreen('abc2.png')
    print("图片检测完成")
    
    if location:
        print('找到了')
    else:
        print('没找到')

except Exception as e:
    print(f"发生错误:{e}")

这样可以帮助你找出程序执行过程中的问题。如果图片确实不在屏幕上,应该能看到“没找到”的输出。如果还是没有输出,请检查你的IDE或执行环境是否有其他问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-14 22:03:21 | 显示全部楼层
abc2.png 应该与程序放在同一目录下,并且确保文件名(包括扩展名)正确,能够正常打开。如果 abc2.png 不在同一目录下,必须指明文件所在的路径。
if pyautogui.locateOnScreen('.\\abc2.png'):
    print('找到了')
else:
    print('没找到')
我现在用相对路径指明了图片所在位置,把 abc2.png 与程序放在同一目录下,再试试看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-15 09:49:11 | 显示全部楼层
smallwh 发表于 2024-9-14 22:03
abc2.png 应该与程序放在同一目录下,并且确保文件名(包括扩展名)正确,能够正常打开。如果 abc2.png 不 ...

加了一个 confidence=0.9 能找到,但是如果没找到,它不会输出,没找到,会报错
[code]import pyautogui
if pyautogui.locateOnScreen('QQ.png', confidence=0.9):
    print('找到了')
else:
    print('没找到')
[/code]
屏幕截图 2024-09-15 093641.png
屏幕截图 2024-09-15 094820.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-15 09:57:55 | 显示全部楼层
FishC 发表于 2024-9-14 10:47
你好,鱼油!如果找不到图片却没有输出“没找到”,可能是因为有异常情况导致程序没有正常执行到`else` ...

大佬IDE或执行环境是否有其他问题,这个怎么看呀,加了一个confidence=0.9 能找到图片,但是如果没找到,还是不会输出没找
import pyautogui
import time

try:
    print("程序开始执行")
    time.sleep(2)  # 加个延迟,等2秒
    location = pyautogui.locateOnScreen('QQ.png', confidence=0.9)
    print("图片检测完成")
    
    if location:
        print('找到了')
    else:
        print('没找到')

except Exception as e:
    print(f"发生错误:{e}")
屏幕截图 2024-09-15 093641.png
屏幕截图 2024-09-15 095630.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-15 09:58:04 | 显示全部楼层
很纯很暧昧 发表于 2024-09-15 09:57
大佬IDE或执行环境是否有其他问题,这个怎么看呀,加 ...


你好,鱼油!你已经在代码中加入了调试信息和异常捕获,这很有帮助。为了进一步诊断问题,我们可以再做些增强:

1. 确认屏幕截图功能是否正常:
   - 确认屏幕截图功能可以正常工作,必要时手动截取屏幕看看是否有图像。

2. 输出`location`变量,确认其值:
   - 比如`print(f"location 的值是: {location}")`,了解 locateOnScreen 返回了什么。

3. 检查 PyAutoGUI 的依赖库:
   - PyAutoGUI 需要依赖 OpenCV 才能使用 `confidence` 参数,确保已经安装 `opencv-python` 库:
     
   
pip install opencv-python

以下是增强后的代码示例:
import pyautogui
import time

try:
    print("程序开始执行")
    time.sleep(2)
    location = pyautogui.locateOnScreen('QQ.png', confidence=0.9)
    print("图片检测完成")
    print(f"location 的值是: {location}")

    if location:
        print('找到了')
    else:
        print('没找到')

except Exception as e:
    print(f"发生错误:{e}")

增加了输出 `location` 变量的值,可以进一步确认 locateOnScreen 的返回值。

此外,你提到了IDE和执行环境的问题,可以尝试以下检查:

1. **确保IDE的控制台输出正常**:
   - 使用简单的`print`语句,确认打印输出是否一直正常工作。

2. **确保pyautogui基础功能正常**:
   - 例如,简单测试鼠标移动或截图功能:
     
   
import pyautogui
     print("当前鼠标位置:", pyautogui.position())
     pyautogui.screenshot("test_screenshot.png")
     print("截图已保存")

3. **更新 PyAutoGUI**:
   - 确保 PyAutoGUI 及其依赖库是最新版本:
     
   
pip install --upgrade pyautogui opencv-python

通过这些步骤应该能够进一步厘清问题所在。如果问题依然存在,可以考虑重新安装 PyAutoGUI 以及其依赖库。希望这些建议能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-15 10:19:50 | 显示全部楼层
FishC 发表于 2024-9-15 09:58
你好,鱼油!你已经在代码中加入了调试信息和异常捕获,这很有帮助。为了进一步诊断问题,我们可以再做 ...

看来要重新装了
屏幕截图 2024-09-15 101729.png
屏幕截图 2024-09-15 101745.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-15 10:20:01 | 显示全部楼层


你好,鱼油!在重新安装软件之前,也可以尝试以下几个步骤,看能否解决问题:

1. **更新库**:确保`pyautogui`及其依赖库(如`pillow`)都是最新的版本。
pip install --upgrade pyautogui pillow

2. **运行简单测试**:写一个简单的程序,验证`pyautogui`的基本功能,例如截图和鼠标控制。
import pyautogui
   import time

   # 截屏测试
   screenshot = pyautogui.screenshot()
   screenshot.save('test.png')
   print("截屏保存成功")

   # 移动鼠标测试
   pyautogui.moveTo(100, 100, duration=1)
   print("鼠标移动成功")

3. **检查屏幕缩放比例**:确保系统显示设置中的“缩放与布局”设置为100%(原始比例)。

4. **调试信息**:在原代码中增加更多打印信息,以便更详细地了解程序的执行路径。
import pyautogui
   import time

   try:
       print("程序开始执行")
       time.sleep(2)  # 加个延迟,等2秒
       location = pyautogui.locateOnScreen('QQ.png', confidence=0.9)
       print(f"图片检测结果: {location}")

       if location:
           print('找到了')
       else:
           print('没找到')

   except Exception as e:
       print(f"发生错误:{e}")

如果以上方法都不起作用,可能是环境问题,重新安装`pyautogui`和`pillow`可能是一个解决办法。祝你成功!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-15 11:04:22 | 显示全部楼层    本楼为最佳答案   
修改前报错的原因是没有找到图片文件,修改后报错的原因是没有在屏幕上找到图片。我查阅了 pyautogui 的官方文档,发现有一个更新影响了 locateOnScreen 函数。
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.

提示:自 0.9.41 版本起,如果用来定位图片位置的函数找不到提供的图片,它们将会引发 ImageNotFoundException 错误,而不是返回 None 。
原文出处:https://pyautogui.readthedocs.io/en/latest/screenshot.html

因此,你必须使用 try 语句捕获异常,不能使用 if 语句
import pyautogui
print("程序开始执行")

try:
    location = pyautogui.locateOnScreen('QQ.png', confidence=0.9)
    print("图片检测完成")
except ImageNotFoundException:
    print('没找到')
else:
    print('找到了')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-16 09:49:21 | 显示全部楼层
smallwh 发表于 2024-9-15 11:04
修改前报错的原因是没有找到图片文件,修改后报错的原因是没有在屏幕上找到图片。我查阅了 pyautogui 的官 ...

谢谢大师,你辛苦了,完美解决
屏幕截图 2024-09-16 094759.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-16 10:03:28 | 显示全部楼层
smallwh 发表于 2024-9-15 11:04
修改前报错的原因是没有找到图片文件,修改后报错的原因是没有在屏幕上找到图片。我查阅了 pyautogui 的官 ...
import pyautogui
import keyboard
keyboard.wait('esc')

大师有没有空,随便帮我看下扫码枪问题,运行上面代码,只能扫十几个码就挂了,就算加延迟也不行,
1.jpg
2.jpg
3.jpg
4.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-16 12:13:46 | 显示全部楼层
抱歉,我可能回答不了你的问题。
我没接触过扫描枪;你只给出了三行代码,不能执行扫描的功能;就 python 崩溃的问题来看,错误很可能发生在底层。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 04:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表