Python 快速屏幕区域截取与有序保存程序

Python 快速屏幕区域截取与有序保存程序
零、背景说明上海图书馆的馆藏书目像一扇扇虚掩的门在线便能推开却不许你带走。它慷慨地提供在线阅读却把下载的门闩得紧紧的。为了把那些书页一页一页地留下来我便动了心思用 Python 写了个小玩意儿。它不贪多只盯着屏幕上一块固定的地方咔嚓一下截下来再按着顺序一张一张地存成 PNG 图像归拢到指定的目录里。日后这些零散的图片便能汇成一本 PDF也算是一种笨拙的收藏了。下面这两张便是从那阅读页面上截下来的。细看那阅读页面每页显示的位置和大小倒是纹丝不动的。只是那显示的时间却有了脾气。有时快像一阵风似的就翻过去了有时又慢慢得让你以为它睡着了。这多半是网速在作祟。因此用定时去截总是不大牢靠的。最好还是等它一页一页安安稳稳地加载完了你再不慌不忙地截一张存一张。于是我便需要一个能快、能准还能按着次序把图存好的 Python 程序。这里给出的法子核心是两样东西一个叫mss是截图的快手一个叫Pillow是存图的好手。两者搭着用既图个快也图个省心。一、前置准备安装依赖库工欲善其事必先利其器。头一桩事便是把这两个 Python 库请进门来。你打开终端或是命令提示符照着下面这行命令敲下去便是了。pip install mss pillowmss这是个专门干屏幕截图的手脚麻利比那常见的pyautogui还要快上几分尤其适合你要一口气截下许多张的场合。Pillow在 Python 里处理图片它是个老熟人了。截下来的图得靠它来规规矩矩地存成 PNG 文件。二、完整可运行代码import mss import mss.tools import os def capture_specific_area(save_dir./screenshots, area(100, 100, 500, 500), start_index1): 截取屏幕特定区域并按顺序保存为PNG格式文件 :param save_dir: 截图保存目录默认当前目录下的screenshots文件夹 :param area: 截图区域格式为(x1, y1, x2, y2) x1/y1区域左上角坐标x2/y2区域右下角坐标 :param start_index: 截图文件名起始序号默认从1开始 # 1. 创建保存目录如果不存在 if not os.path.exists(save_dir): os.makedirs(save_dir) # 2. 解析截图区域适配mss的截图格式 x1, y1, x2, y2 area monitor { top: y1, # 屏幕顶部到区域顶部的距离 left: x1, # 屏幕左侧到区域左侧的距离 width: x2 - x1, # 截图区域宽度 height: y2 - y1, # 截图区域高度 mon: 1, # 截取第1个显示器多显示器环境可调整 } 3. 初始化mss截图对象 with mss.mss() as sct: try: # 生成当前截图的文件名有序命名screenshot_001.png、screenshot_002.png... current_index start_index while True: # 4. 截取指定区域屏幕 screenshot sct.grab(monitor) # 5. 构造保存路径补零为3位保证文件名排序整齐 file_name fscreenshot_{current_index:03d}.png save_path os.path.join(save_dir, file_name) # 6. 保存为PNG文件 mss.tools.to_png(screenshot.rgb, screenshot.size, outputsave_path) print(f已保存截图{save_path}) # 7. 序号自增准备下一次截图 current_index 1 # 8. 可选按回车继续截图按q回车退出如需自动连续截图可删除此段添加延时 user_input input(按回车继续截取输入q退出) if user_input.lower() q: break except Exception as e: print(f截图过程中出现错误{e}) 主程序入口 if name main: 配置参数重点修改这里的area为你需要的屏幕区域 如何获取坐标推荐用微信/QQ截图工具截图时会显示鼠标坐标 TARGET_AREA (200, 200, 800, 600) # 示例左上角(200,200) 到 右下角(800,600)根据自己屏幕显示的坐标修改 调用截图函数 capture_specific_area( save_dir./screenshots, # 截图保存到当前目录的screenshots文件夹 areaTARGET_AREA, # 目标截图区域 start_index1 # 从第1张开始命名 )三、关键部分解释截图区域配置代码中TARGET_AREA (200, 200, 800, 600)是核心配置项你需要根据自己的需求修改。获取坐标的方法打开微信 / QQ 截图快捷键CtrlShiftA/CtrlAltA移动鼠标时会显示当前坐标记录区域的左上角和右下角坐标即可。有序文件名生成采用fscreenshot_{current_index:03d}.png命名03d表示补零为 3 位数字生成的文件名为screenshot_001.png、screenshot_002.png...这样在文件夹中排序更整齐不会出现screenshot_10.png排在screenshot_2.png前面的情况。交互逻辑可选代码中加入了 “按回车继续截图按 q 退出” 的交互逻辑适合手动控制截取时机。如需自动连续截图比如每隔 1 秒截取 1 张根据自己图像显示情况而定一般最好不使用自动连续截图毕竟有时候时间短图像显示不完整可以删除交互代码添加time.sleep()延时修改如下import time # 顶部导入time库 # 替换原有的while循环 while True: screenshot sct.grab(monitor) file_name fscreenshot_{current_index:03d}.png save_path os.path.join(save_dir, file_name) mss.tools.to_png(screenshot.rgb, screenshot.size, outputsave_path) print(f已保存截图{save_path}) current_index 1 time.sleep(1) # 每隔1秒截取1张可修改延时时间四、使用方法头一件事是把代码里那行TARGET_AREA的坐标改成你屏幕上看中的那块地方。接着运行这个 Python 程序。然后便照着提示来想截下一张就按回车想歇了就按个 q 再回车。截下来的图都会乖乖地跑到当前目录下那个叫screenshots的文件夹里去。总结这程序的筋骨是mss和Pillow两个库一个管快一个管存。用之前得先用pip把它们请来。最要紧的配置是那四个数字(x1, y1, x2, y2)定下了你要截的是屏幕上哪一块。这坐标用微信或 QQ 截图工具一看便知。存图的名儿是挨着次序来的还补了零排起队来便不会乱。你可以手动控制也可以让它自动连着截。有了这个 Python 程序再配上一台大些的显示器高些的分辨率得来的图便清晰。这法子虽不算精巧却也是获取资料的一条实在路子。