如何在Python中截取Mac OS X屏幕截图:即命令-控制-Shift-4
使用 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