Mac系统下Python截图仅返回桌面壁纸无上层应用内容如何解决
问题原因
该问题是MacOS系统的隐私权限限制导致的。从MacOS Catalina(10.15)版本开始,系统对屏幕捕获能力增加了权限管控:所有需要读取屏幕内容的进程,必须先获得用户授予的「屏幕录制」权限,未授权的进程调用系统截图接口时,系统会自动屏蔽上层应用窗口内容,仅返回桌面壁纸作为脱敏结果。
你尝试的autopy、PIL ImageGrab、Quartz框架方案本质都是调用系统级的屏幕捕获接口,受权限限制所以只能获取到桌面内容。
解决方案
步骤1:配置屏幕录制权限
打开「系统设置」→「隐私与安全性」→「屏幕录制」,在列表中找到你运行Python脚本的终端(比如Terminal、iTerm2)或者IDE(比如VS Code、PyCharm),打开对应开关后,重启终端/IDE即可生效。
步骤2:实现和cmd + shift + 3效果一致的截图
权限配置完成后,原有方案都可以正常运行,更推荐直接调用系统原生的screencapture工具实现截图,该工具就是系统自带截图快捷键的底层实现,不需要额外安装第三方依赖,调用示例:
import subprocess # 全屏截图,保存到指定路径,效果完全等同于cmd + shift + 3 subprocess.run(["screencapture", "./full_screenshot.png"]) # 可选:截取指定区域,参数格式为 左上角x,左上角y,宽度,高度 subprocess.run(["screencapture", "-R", "100,100,800,600", "./partial_screenshot.png"]) # 可选:截图直接保存到剪贴板,效果等同于cmd + ctrl + shift + 3 subprocess.run(["screencapture", "-c"])
内容的提问来源于stack exchange,提问作者Alfie Stoppani
相关产品推荐
相关产品推荐

