如何使用pyautogui识别屏幕图片并点击,图片读取OSError报错如何解决
问题核心原因
- 首要原因是Python运行时的工作目录和脚本存储目录不一致:你写的相对路径
benz.png会让程序从运行命令时的工作目录读取文件,而非脚本所在文件夹,所以即便图片和脚本放在同一个文件夹,程序也找不到对应文件。 - 次要问题是代码存在逻辑错误:找到图片后的
break语句会直接跳出if分支和外层循环,后面缩进错误的if flag == 1: break永远不会被执行,属于无效代码。
修复步骤
- 先解决图片读取失败问题:
你可以通过动态拼接脚本所在目录的方式获取图片的绝对路径,无需手动写死路径,修改代码如下,在原有导入模块的部分增加os模块导入:
from pyautogui import * import pyautogui import time import keyboard import random import win32api, win32con import os # 新增导入os模块 # 新增:获取脚本所在目录,拼接图片完整路径 script_folder = os.path.dirname(os.path.abspath(__file__)) benz_img_path = os.path.join(script_folder, 'benz.png') time.sleep(5) def click(): win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) while keyboard.is_pressed('q') == False: if pyautogui.locateOnScreen(benz_img_path, region=(0,0,1366,768), grayscale=True, confidence=0.5) != None: click() time.sleep(0.05) break
- 额外排查点:
如果修改路径后还是报错,先检查Windows系统是否关闭了「隐藏已知文件类型的扩展名」设置,避免你实际的图片文件名是benz.png.png但系统只显示benz.png的情况;另外确认Python运行权限可以读取对应文件夹下的文件。
内容的提问来源于stack exchange,提问作者Karim Walid
相关产品推荐
相关产品推荐

