屏幕截图是日常工作和自动化任务中的常见需求。Python提供了多种实现屏幕截图的方法,本文将介绍三种实用的实现方式,包括使用方法、适用场景和完整代码示例。
方法一:使用PIL(Pillow)库实现基础截图
场景介绍
适合简单的单次截图需求,如快速保存当前屏幕状态、制作操作教程配图等。这是最轻量级的解决方案。
使用方法
1、安装Pillow库: pip install Pillow
2、运行脚本即可完成截图
3、截图将保存为当前目录下的 screenshot.jpg
代码示例
from PIL import ImageGrab import datetime def take_screenshot(): # 捕获整个屏幕 screenshot = ImageGrab.grab() # 生成带时间戳的文件名 timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"screenshot_{timestamp}.jpg" # 保存截图 screenshot.save(filename, "JPEG") print(f"截图已保存为: {filename}") if __name__ == "__main__": take_screenshot()方法二:使用pyautogui实现定时连续截图
场景介绍
适合需要连续监控的场景,如软件演示录制、系统监控、自动化测试过程记录等。
使用方法
1、安装pyautogui: pip install pyautogui
2、运行脚本并输入截图间隔时间(秒)和总时长(分钟)
3、截图将自动保存在创建的 screenshots 文件夹中
代码示例
import pyautogui import time import os from datetime import datetime def continuous_screenshot(interval=5, duration_minutes=1): """ 连续截图功能 interval: 截图间隔(秒) duration_minutes: 总持续时间(分钟) """ # 创建保存目录 if not os.path.exists("screenshots"): os.makedirs("screenshots") total_seconds = duration_minutes * 60 screenshot_count = total_seconds // interval print(f"开始连续截图,共{screenshot_count}张,间隔{interval}秒") for i in range(screenshot_count): # 捕获屏幕 screenshot = pyautogui.screenshot() # 生成文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"screenshots/screenshot_{timestamp}_{i+1}.png" # 保存截图 screenshot.save(filename) print(f"已保存第{i+1}张截图: {filename}") # 等待指定间隔 time.sleep(interval) print("连续截图完成!") if __name__ == "__main__": interval = int(input("请输入截图间隔(秒): ")) duration = int(input("请输入截图持续时间(分钟): ")) continuous_screenshot(interval, duration)方法三:使用mss库实现高性能截图
场景介绍
适合需要高性能截图的场景,如游戏录制、实时监控、视频处理等对截图速度要求较高的应用。
使用方法
1、安装mss库: pip install mss
2、运行脚本选择截图模式(单次/连续)
3、截图将保存为PNG格式,支持多显示器配置
代码示例
import mss import mss.tools import time from datetime import datetime def high_performance_screenshot(mode='single', monitor_num=1, interval=1, count=10): """ 高性能截图工具 mode: 'single'单次截图, 'continuous'连续截图 monitor_num: 显示器编号(从1开始) interval: 连续截图间隔(秒) count: 连续截图数量 """ with mss.mss() as sct: # 获取所有显示器信息 monitors = sct.monitors if monitor_num > len(monitors): print(f"错误:只有{len(monitors)}个显示器") return # 选择指定的显示器 monitor = monitors[monitor_num - 1] if mode == 'single': # 单次截图 screenshot = sct.grab(monitor) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"highres_screenshot_{timestamp}.png" mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename) print(f"高清截图已保存: {filename}") elif mode == 'continuous': # 连续截图 print(f"开始高性能连续截图,共{count}张") for i in range(count): screenshot = sct.grab(monitor) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f") filename = f"highres_screenshot_{timestamp}_{i+1}.png" mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename) print(f"已保存第{i+1}张高清截图") if i < count - 1: # 最后一张不需要等待 time.sleep(interval) print("高性能连续截图完成!") if __name__ == "__main__": print("选择截图模式:") print("1 - 单次截图") print("2 - 连续截图") choice = input("请输入选择(1或2): ") if choice == '1': monitor_num = int(input("请输入显示器编号(默认为1): ") or "1") high_performance_screenshot('single', monitor_num) elif choice == '2': monitor_num = int(input("请输入显示器编号(默认为1): ") or "1") interval = float(input("请输入截图间隔(秒): ")) count = int(input("请输入截图数量: ")) high_performance_screenshot('continuous', monitor_num, interval, count)根据具体需求选择合适的截图方法,可以大大提高工作效率。三种方法各有优势,建议根据实际场景灵活选择。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| PIL库 | 简单轻量,依赖少 | 功能相对基础 | 简单单次截图 |
| pyautogui | 功能丰富,易于使用 | 性能一般 | 常规自动化任务 |
| mss库 | 高性能,支持多显示器 | 安装稍复杂 | 高性能需求场景 |
“无他,惟手熟尔”!有需要的用起来!关注「Nicholas与Pypi」获取更多Python实战!