PyAutoGUI报FileNotFoundError:找不到calc7key.PNG文件求助
解决PyAutoGUI
locateOnScreen 文件找不到错误,及识别任务栏Chrome图标的可行方案 先帮你解决眼前的FileNotFoundError问题,再针对你的实际需求给出更可靠的方案:
一、修复FileNotFoundError的几个排查点
你说已经把图片放在对应目录,但还是报错,大概率是路径或者文件本身的问题,按下面的步骤逐一排查:
强制使用绝对路径
PyAutoGUI默认会从你运行Python脚本的当前工作目录查找图片,而不是你认为的“对应目录”。最简单的办法是直接传入图片的绝对路径,记得用raw字符串(加r前缀)避免转义字符问题:button7location = pyautogui.locateOnScreen(r'C:\Users\你的用户名\Desktop\calc7key.PNG')替换成你实际的文件路径,确保路径里的用户名、文件夹名完全正确。
检查文件名的细节
- 注意大小写:虽然Windows系统不区分大小写,但PyAutoGUI依赖的底层库偶尔会严格校验,你代码里写的是
calc7key.png,但实际文件是calc7key.PNG?统一成一致的写法试试。 - 确认真实文件名:有时候Windows默认隐藏文件扩展名,你看到的
calc7key.PNG可能实际是calc7key.PNG.png。打开文件夹的“查看”选项,勾选“文件扩展名”,检查真实的文件名。
- 注意大小写:虽然Windows系统不区分大小写,但PyAutoGUI依赖的底层库偶尔会严格校验,你代码里写的是
验证图片文件是否正常
有可能图片本身损坏或者格式不对,用Python的PIL库先测试能不能打开:from PIL import Image try: img = Image.open('calc7key.PNG') img.show() print("图片可以正常读取") except Exception as e: print(f"图片读取失败:{e}")如果这里报错,说明文件有问题,重新截图保存成标准的PNG格式。
二、针对你的实际需求:识别并打开任务栏Chrome图标
用图像识别来定位任务栏图标其实不太稳定——比如Chrome有未读消息小红点、屏幕分辨率变化、任务栏位置调整都可能导致识别失败。这里给你两个方案,优先推荐第二个:
方案1:优化后的图像识别方案
如果一定要用PyAutoGUI,做以下优化:
- 截取任务栏上无状态的Chrome图标(别带小红点、未读标记),保存为
chrome_taskbar.png。 - 安装
opencv-python来启用置信度参数,降低识别的严格性:pip install opencv-python - 代码示例:
import pyautogui import time # 给你3秒时间切换到桌面,确保任务栏可见 time.sleep(3) try: # 用绝对路径+置信度参数 chrome_pos = pyautogui.locateOnScreen( r'C:\Users\你的用户名\Desktop\chrome_taskbar.png', confidence=0.8 # 允许80%的匹配度,适配轻微的视觉变化 ) if chrome_pos: center_x, center_y = pyautogui.center(chrome_pos) pyautogui.click(center_x, center_y) print("成功点击任务栏的Chrome图标") else: print("没找到Chrome图标,请检查截图是否准确") except Exception as e: print(f"出错了:{e}")
方案2:用Windows API直接切换/打开Chrome(更稳定)
跳过图像识别,直接通过系统API操作窗口,完全不受视觉变化影响:
- 先安装
pywin32库:pip install pywin32 - 代码示例:
这个方法直接通过窗口标题查找Chrome进程,不管任务栏在哪里,都能准确切换到Chrome窗口,比图像识别可靠得多。import win32gui import win32con import os def find_chrome_window(): # Chrome的窗口标题通常包含"Google Chrome",可以根据你实际的窗口标题调整 def callback(hwnd, extra): if win32gui.IsWindowVisible(hwnd): window_title = win32gui.GetWindowText(hwnd) if "Google Chrome" in window_title: extra.append(hwnd) return True hwnd_list = [] win32gui.EnumWindows(callback, hwnd_list) return hwnd_list[0] if hwnd_list else None chrome_hwnd = find_chrome_window() if chrome_hwnd: # 先恢复窗口(如果最小化),再放到前台 win32gui.ShowWindow(chrome_hwnd, win32con.SW_RESTORE) win32gui.SetForegroundWindow(chrome_hwnd) print("Chrome窗口已激活") else: # 如果没有运行Chrome,直接打开 os.startfile("chrome.exe") print("已启动新的Chrome窗口")
内容的提问来源于stack exchange,提问作者4
相关产品推荐
相关产品推荐

