You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyAutoGUI报FileNotFoundError:找不到calc7key.PNG文件求助

解决PyAutoGUI locateOnScreen 文件找不到错误,及识别任务栏Chrome图标的可行方案

先帮你解决眼前的FileNotFoundError问题,再针对你的实际需求给出更可靠的方案:

一、修复FileNotFoundError的几个排查点

你说已经把图片放在对应目录,但还是报错,大概率是路径或者文件本身的问题,按下面的步骤逐一排查:

  1. 强制使用绝对路径
    PyAutoGUI默认会从你运行Python脚本的当前工作目录查找图片,而不是你认为的“对应目录”。最简单的办法是直接传入图片的绝对路径,记得用raw字符串(加r前缀)避免转义字符问题:

    button7location = pyautogui.locateOnScreen(r'C:\Users\你的用户名\Desktop\calc7key.PNG')
    

    替换成你实际的文件路径,确保路径里的用户名、文件夹名完全正确。

  2. 检查文件名的细节

    • 注意大小写:虽然Windows系统不区分大小写,但PyAutoGUI依赖的底层库偶尔会严格校验,你代码里写的是calc7key.png,但实际文件是calc7key.PNG?统一成一致的写法试试。
    • 确认真实文件名:有时候Windows默认隐藏文件扩展名,你看到的calc7key.PNG可能实际是calc7key.PNG.png。打开文件夹的“查看”选项,勾选“文件扩展名”,检查真实的文件名。
  3. 验证图片文件是否正常
    有可能图片本身损坏或者格式不对,用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,做以下优化:

  1. 截取任务栏上无状态的Chrome图标(别带小红点、未读标记),保存为chrome_taskbar.png。
  2. 安装opencv-python来启用置信度参数,降低识别的严格性:
    pip install opencv-python
    
  3. 代码示例:
    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操作窗口,完全不受视觉变化影响:

  1. 先安装pywin32库:
    pip install pywin32
    
  2. 代码示例:
    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窗口")
    
    这个方法直接通过窗口标题查找Chrome进程,不管任务栏在哪里,都能准确切换到Chrome窗口,比图像识别可靠得多。

内容的提问来源于stack exchange,提问作者4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:08