问题描述
我需要截取整个网页的屏幕截图。
我看过How can I take a full page screenshot of a webpage from the command line?,里面提出了很多截屏的方法,但我需要使用firefox才能获得更好的效果。
最佳方法
要在 Firefox 中制作显示页面整个可滚动区域的网页截图,我提出了两种不同的方法。
两者都保存显示所有部分的页面图像或您可以通过向下滚动(和向右/向左)滚动到达的网页 – 将所有视图位置拼接在一起;\n对于长页面,图像很容易达到数千像素高.
“professional” 方式 – 使用网络浏览器 GUI-level 测试和自动化工具:
自动化工具 Selenium – 通常用于 UI 测试 – 可以进行整页屏幕截图;\n不过,仅为该任务设置它似乎有些开销。
例如:
Command: open; Target: http://www.google.com
Command: captureEntirePageScreenshotAndWait; Target: \\Screenshots\\test.png
参见 so.SE: Screenshots using Selenium IDE Firefox plugin
要安装 Selenium 的 firefox 部分,请获取 firefox add-on – 但不是来自官方 add-ons 页面 – 它作为 xpi 文件位于 download page of Selenium 上。 This is the current version。
(有很多 add-ons 用于扩展 selenium 本身(但在 firefox add-on 的技术中),在 Add-ons website 上都称为“Selenium …”甚至“Selenium IDE …” – 非常混乱。)
“hackish” 方式 – 通过键盘自动化使用内部 firefox 命令:
firefox 中有一个内部命令提示符,一种开发工具,正如@Fireflight 指出的那样,它有一个制作屏幕截图的命令。但是,据我所知,这不能正常地从命令 shell 行控制。但是我们可以做的是模拟按键以利用它。
我们需要选择一个浏览器窗口,打开提示,输入 firefox 内部命令(使用基于当前日期和时间的文件名),运行命令,然后再次关闭提示:
FF=$(xdotool selectwindow)
xdotool key --window $FF Shift+F2 sleep 1
xdotool type --window $FF --delay 50 "screenshot page-$(date +%Y%m%d-%H%M%S).png --fullpage "
xdotool key --window $FF Return sleep 0.5 key --window $FF Shift+F2
命令行实用程序 xdotool
可以在 X11 事件级别与 X 窗口交互。我们用它来选择显示页面的 firefox 窗口,并发送正确的击键来制作屏幕截图。
(这是一种有点脆弱的方法:它取决于键盘时序,如果提示已经打开或包含文本(要打开或关闭它,请按 Shift-F2),它将不起作用 – 但如果它起作用,那就太好了。)
作为此类屏幕截图的示例,这里是 manpages.ubuntu.com 上的 man xdotool
示例,缩小到 20%(原始 1336×15653),使用 xdotool
解决方案完成:
次佳方法
在 Firefox 中,您可以点击 Shift-F2
,然后在出现的命令行中键入:
screenshot filename.png --fullpage
还有几个 more commands and options 可用。