我在VPS中的Xvfb上运行Firefox。我想做的是拍一页整页的截图。
我可以使用
将Firefox重定向到特定页面firefox http://google.com
使用ImageMagick
截取屏幕截图(在X中)import root -window output.jpg
问题是,大部分页面都需要滚动,我事先无法知道高度。
另一种方法是选择一个非常大的高度(如4000px),然后处理图像并删除无用的部分。但这是不必要的处理。
我发现了许多Firefox附加组件,但我正在寻找可以使用Shell命令行编程的解决方案。
编辑:我最终编写了自己的FireFox extension来执行此操作。
答案 0 :(得分:464)
Developer Toolbar GCLI and Shift+F2 shortcut were removed in Firefox version 60。截取60或更新的屏幕截图:
:screenshot
或:screenshot --fullpage
Find out more regarding screenshots and other features
对于Firefox版本< 60:
按 Shift + F2 或转到工具> Web开发人员>开发人员工具栏以打开命令行。写:
screenshot
并按输入以截取屏幕截图。
要完全回答这个问题,您甚至可以保存整个页面,而不仅仅是它的可见部分:
screenshot --fullpage
要将屏幕截图复制到剪贴板,请使用--clipboard
选项:
screenshot --clipboard --fullpage
Firefox 18改变了参数传递给命令的方式,你必须在它们之前添加“ - ”。
您可以找到一些文档和完整的命令列表here。
<子> PS。屏幕截图默认保存在 downloads 目录中。
答案 1 :(得分:131)
更新2018-07-23
正如评论中刚刚指出的那样,这个问题是关于从命令行获取屏幕截图。对不起,我刚看完了。所以这是正确的答案:
从Firefox 57开始,您可以在无头模式下创建屏幕截图,如下所示:
firefox -screenshot https://developer.mozilla.com
在documentation中阅读更多内容。
更新2017-06-15
从Firefox 55开始,Firefox Screenshots作为一种更灵活的选择。从Firefox 57开始,屏幕截图也可以捕获整页。
原始回答
自Firefox 32以来,开发人员工具中也有full page screenshot button(F12)。如果未启用,请转到开发人员工具设置(齿轮按钮)并选择&#34;获取完整的屏幕截图&#34;在&#34;可用的工具箱按钮&#34;部分。
来源:developer.mozilla.org
默认情况下,屏幕截图保存在下载目录中。这与工具栏中的screenshot --fullpage
类似。
答案 2 :(得分:9)
我最终编写了一个执行此操作的自定义解决方案(Firefox扩展)。我认为,当我开发它时,enreas中提到的命令行不存在。
Firefox扩展程序为CmdShots。如果您需要对截屏过程进行更精细的控制(或者您想要进行一些HTML / JS修改和图像处理),这是一个不错的选择。
您可以使用它并滥用它。我决定保留它未经许可,所以你可以随心所欲地玩它。
答案 3 :(得分:7)
我认为您正在寻找的是一个实用程序,可以将浏览器中打开的完整页面保存到png文件中。很可能你正在寻找像commandlineprint2这样的实用工具。
安装扩展程序后,只需输入命令:
firefox -print http://google.com -printfile ~/foo.png
答案 4 :(得分:1)
Firefox Screenshots是Firefox附带的新工具。它不是开发人员工具,而是针对浏览器的最终用户的。
要获取屏幕截图,请点击地址栏中的页面操作菜单,然后点击“获取屏幕截图”。如果然后单击“保存整个页面”,它将保存整个页面,并为您滚动。
答案 5 :(得分:0)
您可以将selenium和网络驱动程序用于Firefox。
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')