如何在Python中截取Mac OS X屏幕截图:即命令-控制-Shift-4

4 投票
7 回答
8700 浏览
提问于 2025-04-18 06:37

使用 Command-Control-Shift-4 组合键可以截取屏幕的一部分,并将其保存到剪贴板。我在想,能不能在 Python 里面也做到这一点?理想情况下,我希望能够指定图像文件的格式,以及在 Python 中程序化地选择保存的位置。有没有什么想法?

稍后编辑 1

我找到了一段 applescript,它几乎能满足我的需求,不过这个脚本是截取整个屏幕的。我想把它限制在一个区域内。

tell application "System Events"
    keystroke (ASCII character 36) using {command down}
    delay 1
    keystroke space
end tell

稍后编辑 2

下面的 apple script 能很好地截取指定区域的屏幕(不过它仍然无法控制截取的图像保存到哪里,默认是保存到用户的桌面)。

tell application "System Events"
    keystroke (ASCII character 36) using {command down}
    key code 4 using {command down, shift down}
end tell

问题是如何自定义输出文件的保存路径……

7 个回答

0

我发现这些命令在我的Mac OS X上可以用。

from subprocess import call

call(["screencapture", "screenshot.jpg"])   # Captures full screen
call(["screencapture", "-R 100,100,500,500", "screenshot.jpg"]) # Captures area of screen

第一个命令可以截取整个屏幕。第二个命令则是截取屏幕的一部分。这个截图会自动保存为 screenshot.jpg,保存在运行这个Python代码的文件夹里。

0

我只需导入 from selenium import webdriver 就能顺利运行:

self.now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
self.driver.save_screenshot('login-%s.png' % self.now)

它会在执行脚本的同一个文件夹里创建带有时间戳的文件。

0

比如说,/Users/MYNAME/ 这个文件夹应该存在,才能正常工作:

import subprocess

def runAppleScript(appleScript=None):   
    AppleProcess=subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    AppleProcess.communicate(appleScript)[0]

appleScript="""on run
    set shellCommand to "/usr/sbin/screencapture -i \\"" & "/Users/MYNAME/Pictures/Screenshot.png\\""
    do shell script shellCommand
end run"""

runAppleScript(appleScript)
1

如果你是Mac用户,发现屏幕截图功能有问题,比如截图时只显示桌面壁纸,那可能是因为你需要给相关的软件(比如终端、PyCharm CE等)授权。你可以在系统偏好设置里找到这个选项,路径是:系统偏好设置 > 安全性与隐私 > 隐私 > 屏幕录制。

9

在Mac上似乎有一个叫做 screencapture 的标准工具,你可以用 subprocess 来调用它,方法如下:

from subprocess import call
call(["screencapture", "screenshot.jpg"])

此外,screencapture 还有一些选项,可以让你指定一个特定的矩形区域:

$ screencapture -h
. . . 
  -R<x,y,w,h> capture screen rect

撰写回答