在命令行中使用Firefox截取完整页面的截图

我在VPS的Xvfb上运行Firefox。我想做的是截取整个页面的截图。

我可以使用将Firefox重定向到特定页面

firefox http://google.com

并使用ImageMagick截图(在X内)

import root -window output.jpg

问题是,大部分页面需要滚动,我无法事先知道高度。

另一种方法是选择一个非常大的高度(比如4000px),然后处理图像并删除无用的部分。但这是不必要的处理。

我发现了许多Firefox插件,但我正在寻找一个可以使用Shell命令行编程的解决方案。

编辑:我最终写了自己的FireFox扩展来做这件事。

222759 次浏览

我认为你正在寻找的是一个实用程序,它可以使你保存在浏览器中打开的完整的页面为png文件。很可能你正在寻找类似commandlineprint2的实用程序。

安装扩展后,你只需要输入命令:

firefox -print http://google.com -printfile ~/foo.png

开发者工具栏GCLI和Shift+F2快捷方式在Firefox 60版本中被移除。要在60或更新版本中截取截图:

  • Ctrl+转变+K打开开发人员控制台(macOS上为⌥选项+⌘命令+K)
  • 类型:screenshot:screenshot --fullpage

了解更多关于截图和其他功能


对于Firefox版本<60:

转变+F2或进入工具比;Web开发人员>开发人员工具栏打开命令行。写:

screenshot

并按输入以截取屏幕截图。

为了完全回答这个问题,你甚至可以保存整个页面,而不仅仅是它的可见部分:

screenshot --fullpage

要将截图复制到剪贴板,使用--clipboard选项:

screenshot --clipboard --fullpage

Firefox 18改变参数传递给命令的方式,你必须添加"——"在他们面前。

Firefox 88.0有一个新的截图方法。如果extensions.screenshots.disabled:配置中被设置为false,您可以右键单击屏幕并选择把截图。还有一个截图菜单按钮,你可以自定义添加到你的菜单中。

你可以找到一些文档和命令在这里的完整列表。

PS.截图默认保存在downloads目录下。

我最终编写了一个自定义解决方案(Firefox扩展)来实现这一点。我想在我开发它的时候,enreas中提到的命令行已经不存在了。

Firefox扩展名为CmdShots。如果你需要更好地控制截屏过程(或者你想做一些HTML/JS修改和图像处理),这是一个很好的选择。

你可以利用它也可以滥用它。我决定不给它授权,所以你想怎么玩就怎么玩。

更新2018-07-23

正如刚才在评论中指出的,这个问题是关于获得截图从命令行。抱歉,我刚看了一遍。下面是正确答案:

从Firefox 57开始,你可以在无头模式下创建如下截图:

firefox -screenshot https://developer.mozilla.com

文档中阅读更多。

更新2017-06-15

在Firefox 55中,有火狐浏览器截图作为一个更灵活的选择。从Firefox 57开始,屏幕截图也可以捕获整个页面。

原来的答案

自Firefox 32以来,在开发人员工具(F12)中也有全页截图按钮。如果未启用,转到开发人员工具设置(齿轮按钮),并在“可用工具箱按钮”部分选择“全页截图”。

developer tools toolbar 来源:developer.mozilla.org < / em >

默认情况下,截图保存在下载目录中。这类似于工具栏中的screenshot --fullpage

火狐浏览器截图是Firefox附带的新工具。它不是一个开发人员工具,而是针对浏览器的最终用户。

如果需要截图,右键单击页面上的空白处,选择“截屏”。如果你点击“保存整页”,它会保存整页,为你滚动。

(来源:mozilla.net)

你可以在Firefox中使用selenium和webdriver。

import selenium.webdriver
import selenium.common


options = selenium.webdriver.firefox.options.Options()
# options.headless = True
with selenium.webdriver.Firefox(options=options) as driver:
driver.get('http://google.com')
time.sleep(2)
root=driver.find_element_by_tag_name('html')
root.screenshot('whole page screenshot.png')