pyautogui locateOnScreen如何正确设置查找图片的文件路径?
问题核心原因
三个高频触发点:
- 相对路径基准错误:Python读取相对路径时,默认以程序启动时的工作目录为查找起点,和.py代码文件本身的存放位置没有直接关系。比如你在IDE里运行代码时如果工作目录没配置对,哪怕图片和代码放在同一个文件夹,直接传文件名也会找不到。你之前尝试传入
pyautogui/x.png不生效也是同理——如果当前工作目录不在pyautogui文件夹的上一级,这个相对路径同样是无效的。 - 系统隐藏扩展名导致文件名错误:Windows默认开启隐藏已知文件类型扩展名,你在资源管理器里看到的
pythontest.png,真实文件名很可能是pythontest.png.png——保存图片时系统自动追加了.png后缀,因为扩展名被隐藏你看不到,传入代码的文件名和真实文件名不匹配,自然会报文件不存在。 - 额外隐患:你把存放代码的文件夹命名为
pyautogui,和第三方库同名,很容易引发导入冲突,建议先把文件夹改成非重名的名称,比如pyautogui_demo。
可直接落地的解决步骤
- 先修正文件名显示问题:打开存放代码和截图的文件夹,点击资源管理器顶部的「查看」选项卡,勾选「文件扩展名」选项,确认截图的真实后缀为.png,不存在双后缀的情况。
- 代码中放弃使用不可靠的相对路径,基于当前代码文件的位置拼接绝对路径,彻底绕开工作目录的影响,修改后的可运行代码如下:
import pyautogui import time import os # 获取当前代码文件所在文件夹的绝对路径 current_file_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接出截图的完整绝对路径 screenshot_path = os.path.join(current_file_dir, "pythontest.png") # 调试用:路径不对时会打印False,可对照输出的路径核对文件位置 print(f"当前查找的图片路径:{screenshot_path},文件是否存在:{os.path.exists(screenshot_path)}") print("Starts in 2 seconds") time.sleep(2) first = pyautogui.locateCenterOnScreen(screenshot_path) pyautogui.click(first)
补充排查点
如果路径确认存在还是调用失败,不属于路径问题:
- 检查系统显示缩放:如果你的Windows开了125%、150%等非100%的显示缩放,pyautogui默认无法匹配屏幕内容,需要先安装
opencv-python库,调用时传入置信度参数:pyautogui.locateCenterOnScreen(screenshot_path, confidence=0.9) - 确认截图内容和屏幕显示完全一致:截图不能有多余边框、匹配区域不能被其他窗口遮挡,否则函数会返回None引发后续报错。
内容的提问来源于stack exchange,提问作者Duncan00
相关产品推荐
相关产品推荐

