Python 屏幕截图教程:pyautogui 全屏与区域截图
Python 用 pyautogui 或 PIL 实现全屏截图、指定区域截图、定时自动截图,保存为 PNG,配合定时任务实现桌面监控、自动取证等办公自动化场景。
场景痛点
做自动化测试要保留每次操作后的画面、远程监控要定时截屏、出问题要留证据,靠手动按 PrtScr 再粘贴到画图里太繁琐。Python 几行代码就能把整个屏幕或指定区域存成 PNG,配合定时任务可以无人值守地连续截图。
用到的库
pip install pyautogui
pyautogui 自带截图能力,底层在 Windows/Mac 用系统 API,在 Linux 上依赖 scrot 或 Pillow。
完整代码
import os
import time
from datetime import datetime
import pyautogui
def full_screenshot(save_dir="screenshots"):
"""全屏截图,按时间戳命名"""
os.makedirs(save_dir, exist_ok=True)
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
path = os.path.join(save_dir, f"full_{ts}.png")
img = pyautogui.screenshot()
img.save(path)
print(f"全屏截图已保存:{path}")
return path
def region_screenshot(x, y, width, height, save_dir="screenshots"):
"""截取屏幕上指定矩形区域"""
os.makedirs(save_dir, exist_ok=True)
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
path = os.path.join(save_dir, f"region_{ts}.png")
# region 参数是 (left, top, width, height)
img = pyautogui.screenshot(region=(x, y, width, height))
img.save(path)
print(f"区域截图已保存:{path} 区域=({x},{y},{width}x{height})")
return path
def auto_screenshot(interval=5, count=3, save_dir="screenshots"):
"""每隔 interval 秒截一张,连续 count 张"""
print(f"开始自动截图,每 {interval} 秒一张,共 {count} 张")
for i in range(count):
full_screenshot(save_dir)
if i < count - 1:
time.sleep(interval)
def main():
# 1. 立刻全屏截一张
full_screenshot()
# 2. 截屏幕左上角 800x600 的区域
region_screenshot(0, 0, 800, 600)
# 3. 连续自动截 3 张,每张间隔 3 秒
auto_screenshot(interval=3, count=3)
if __name__ == "__main__":
main()
代码讲解
pyautogui.screenshot()不传参数就是全屏截图,返回 PIL Image 对象,可以直接.save(path)。region=(left, top, width, height)指定矩形区域,坐标原点在屏幕左上角,单位是像素。- 文件名用时间戳命名,避免反复覆盖,同时方便按时间排序查看。
auto_screenshot配合time.sleep(interval)实现定时连拍,配合 schedule 库可以做到全天每 N 分钟截一张。
运行结果
运行后在脚本同目录生成 screenshots/ 文件夹,里面依次出现:
- full_20260914_093015.png 全屏图
- region_20260914_093015.png 左上角 800x600 区域图
- 后续每隔 3 秒再生成两张全屏图
打开 PNG 即可看到对应时刻的屏幕画面。
注意事项
- 多显示器环境下
pyautogui.screenshot()默认截主屏;要截副屏需要用mss库或PIL.ImageGrab.grab(all_screens=True)。 - Linux 下需要先装
scrot:sudo apt install scrot,否则截图会报错。 - 远程桌面 / 锁屏状态下截图可能得到黑屏,因为系统不允许后台抓桌面。
- 截图文件默认 PNG 无损,体积较大;长期归档可在保存前转 JPG:
img.convert("RGB").save(path, "JPEG", quality=80)
- 自动化脚本里加
pyautogui.FAILSAFE = True,鼠标甩到屏幕角落可以紧急停脚本。

更新时间:2026-09-14 20:35:42
上一篇:Python 模拟键盘鼠标操作:pyautogui 自动化入门