Pyautogui.screenshot()函数无法正常工作,截图未保存
解决pyautogui截图无法保存带数字后缀文件的问题
核心问题排查与解决步骤
先确保目标目录存在:pyautogui不会自动创建不存在的文件夹,没建目录的话截图根本存不进去。先写代码自动创建:
import os # 定义截图保存目录 save_dir = "Screenshots" # 目录不存在则创建,exist_ok=True避免重复创建报错 os.makedirs(save_dir, exist_ok=True)正确实现带数字后缀的命名逻辑:统计目录里已有的截图数量,找到最大的数字后缀,生成下一个文件名:
import glob # 搜索目录里所有screenshot_*.png文件 existing_files = glob.glob(os.path.join(save_dir, "screenshot_*.png")) # 提取数字后缀并找到最大值 max_num = 0 for file in existing_files: # 从文件名中提取数字部分,比如screenshot_3.png -> 3 num = int(os.path.splitext(os.path.basename(file))[0].split("_")[1]) if num > max_num: max_num = num # 生成新的文件名 new_filename = os.path.join(save_dir, f"screenshot_{max_num + 1}.png")正确调用截图保存方法:两种写法任选其一:
写法一:先截图再保存import pyautogui # 截取全屏 screenshot = pyautogui.screenshot() # 保存到指定路径 screenshot.save(new_filename)写法二:直接在screenshot()里指定文件名
pyautogui.screenshot(new_filename)
完整可运行代码
新手直接复制就能用:
import os import glob import pyautogui # 定义保存目录 save_dir = "Screenshots" os.makedirs(save_dir, exist_ok=True) # 统计现有截图的最大数字后缀 existing_files = glob.glob(os.path.join(save_dir, "screenshot_*.png")) max_num = 0 for file in existing_files: try: num = int(os.path.splitext(os.path.basename(file))[0].split("_")[1]) if num > max_num: max_num = num except (IndexError, ValueError): # 遇到不符合命名规则的文件跳过 continue # 生成新文件名并截图保存 new_filename = os.path.join(save_dir, f"screenshot_{max_num + 1}.png") pyautogui.screenshot(new_filename) print(f"截图已保存到:{new_filename}")
常见错误排查
- 之前的代码可能没创建目录:直接指定
Screenshots/screenshot_1.png时,目录不存在会导致保存失败,且无提示(PIL默认行为)。 - 文件名路径写错:用相对路径但当前工作目录不对,
os.path.join能避免路径拼接的问题。 - 没正确调用保存方法:只写
pyautogui.screenshot()而没赋值或指定filename,截图只会留在内存里,不会存到硬盘。
内容的提问来源于stack exchange,提问作者Bossman
相关产品推荐
相关产品推荐

