我的知识记录

Python 屏幕截图教程:pyautogui 全屏与区域截图

Python 用 pyautogui 或 PIL 实现全屏截图、指定区域截图、定时自动截图,保存为 PNG,配合定时任务实现桌面监控、自动取证等办公自动化场景。

场景痛点

做自动化测试要保留每次操作后的画面、远程监控要定时截屏、出问题要留证据,靠手动按 PrtScr 再粘贴到画图里太繁琐。Python 几行代码就能把整个屏幕或指定区域存成 PNG,配合定时任务可以无人值守地连续截图。

用到的库

pip install pyautogui

pyautogui 自带截图能力,底层在 Windows/Mac 用系统 API,在 Linux 上依赖 scrotPillow

完整代码

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 下需要先装 scrotsudo apt install scrot,否则截图会报错。
  • 远程桌面 / 锁屏状态下截图可能得到黑屏,因为系统不允许后台抓桌面。
  • 截图文件默认 PNG 无损,体积较大;长期归档可在保存前转 JPG:
img.convert("RGB").save(path, "JPEG", quality=80)
  • 自动化脚本里加 pyautogui.FAILSAFE = True,鼠标甩到屏幕角落可以紧急停脚本。

Python 屏幕截图教程:pyautogui 全屏与区域截图

标签:

更新时间:2026-09-14 20:35:42

上一篇:Python 模拟键盘鼠标操作:pyautogui 自动化入门

下一篇:Python 读取屏幕像素颜色:pyautogui 取色器与监控