捕获浏览器内容的屏幕截图(网站)
Capture screenshot of browser content (website)
我的目标是拥有一个网站的图像(是的,就这么简单)。
我知道有像 html2canvas 这样的工具。但是我不希望客户端浏览器呈现屏幕截图。
一个原因是我使用了带有 webview 的 chrome 扩展,其本质上类似于 iFrame
。出于安全原因,无法为包含 iFrame
的网站呈现屏幕截图。
我也知道他们正在开发 natively support capturing website screenshots 的功能,但我想要一个跨浏览器的解决方案,而不是依赖于浏览器的可能性。所有这些都发生在服务器上,因此它应该可以通过命令行执行。
我现在做的是:
- 通过命令行打开浏览器
- 将焦点切换到浏览器window通过命令行
- 制作屏幕截图(在 mac 上截屏,在 Linux 上滚动)通过命令行
在这个基本级别上做它的缺点是图像包含状态栏、浏览器插件等。事实上,我只想拥有实际的 网站内容 而没有这些特定于应用程序的东西。
- 最糟糕的解决方案是针对每个浏览器 硬编码内容相对于 window 的 0|0 位置。这很糟糕(原因很明显)。
- 我想出的另一个解决方案是:告诉浏览器(我可以说话
通过套接字到插件)在 x:0;y:0; 添加类似 QR 码的内容,将屏幕截图发送到图像处理服务器。
之后删除二维码并再次发送屏幕截图。然后我
知道相对于 0|0 的每个点,但它也不是那么优雅。
最好的东西是命令行工具,它可以让我确定要捕获应用程序的哪个部分的图像。
一个例子是this plugin for Firefox or this server-side tool or all these tools providing screenshots of websites with different browsers and OS like this。我想知道他们是如何摆脱浏览器特定的 GUI 元素的。
加法:
我不知道我是否说得足够清楚,但我想要特定浏览器内容的屏幕截图,但没有浏览器特定的 GUI 元素。这意味着应用程序 运行 无头浏览器对我没有用。因为无头浏览器有自己的引擎。我特别想截取例如Firefox 版本 x.
大多数服务器端语言只提供 HTML 而从不渲染它。不久前,我 运行 研究了索引单页 javascript 应用程序的问题,其中一个解决方案是 phantomJS。
PhantomJS 完全可以满足您的需求。您可以渲染 HTML(服务端),Phantom 也内置了 canvas,因此您可以使用它进行截图。 Phantom 是 webkit,因此它将涵盖大多数流行的浏览器(Chrome、Safari、Opera)。如果您想查看该网站在 Firefox 上的外观,您可以尝试 SlimerJS(类似于 PhantomJs,但运行 Gecko 引擎)。
这将涵盖所有最流行的浏览器(IE 除外)。这仍然是一个无头解决方案,但您将能够看到不同的布局引擎。您将需要 NodeJS,这可能需要一点学习,但它们都有关于屏幕截图的文档。祝你好运!
有两种方法可以做到:
- 为 Firefox 创建插件或 Chrome
屏幕截图是通过在页面上创建 canvas 叠加层来截取的。图片取自文档,所以浏览器UI不是图片的一部分。
- 重新创建浏览器(PhantomJS、TrifleJS)
首先没有浏览器UI。
我过去曾有过一些运气 XULRunner
您可以尝试此处概述的例程:https://blog.builtwith.com/2010/07/02/mozilla-automated-website-screen-grabber/
它基本上运行 shell 的 Firefox 并自动执行抓取屏幕截图的过程。它可能需要一些调整,但我认为它可以满足您所写的要求。
Awesomescreenshot 将实际向下滚动页面以截取实际屏幕截图,然后将这些图像组合成一张长图供您使用。您甚至可以将其设置为仅捕获正在显示的页面部分或选定部分。
您可以将其与宏类型 program/scripting 语言混合使用,例如 Auto Hot Keys。您可能会或可能不会发现它比使用命令行更容易。我想这取决于你想做什么。
你知道硒吗?
它是一个实际打开特定浏览器并运行脚本测试的测试工具。
它也可以用来截屏。
This might be a solution to your problem.
有多种工具可以开源,也可以付费使用。但是,请牢记安全原因。我会建议您使用 'Save to Drive' 扩展名 Google 本身。
这将为您提供一种更安全的方式来将屏幕截图直接保存到您的 google 驱动器,并且与屏幕截图一起,它还允许用户将图片或其他文档保存到 google 驱动器。
// 第二个建议 //
如果您不想使用上述扩展,那么您可以使用 'Blipshot',它是一个开源工具,也可以在 GitHub.
上使用
// 第三条建议 //
第三个最佳解决方案是全页屏幕截图。
这三个工具是 Google Chrome 以及其他浏览器中评价最高的屏幕截图工具中的少数几个。
希望对您有所帮助!
浏览器、版本和os平台的多种组合
要捕获特定浏览器和版本的网页截图,需要一个可以启动的框架,运行并在所有这些浏览器中捕获,此外,问题没有说明特定平台是否也需要它结合上述浏览器和版本,如 OSX、Windows、Linux、Android 等。这些平台的不同版本将进一步增加 possible组合。
- 您需要设置、维护这些浏览器
- 寻找或创建一个框架来驱动它们,Selenium 可能是您最好的选择
- 克服 Selenium 对某些 browser/OS 组合缺乏支持的问题
- 一个管理这个和 exposes 的基础设施,就像一个很好的 API 供使用
但是有现有的解决方案,或者相关的解决方案,例如:
关于在特定浏览器、版本、平台等中获取屏幕截图
http://browsershots.org/ 是免费的,并且有大量的浏览器组合os,不太清楚是否可以通过编程方式访问它。
只需调用现有的 API
即可完成此操作
crossbrowsertesting.com 是一项似乎满足所有要求的商业服务(免费试用)。
拥有可以做到这一点的技术
http://usersnap.com 支持多种浏览器,包括桌面和移动浏览器,并且已经做了大量工作以在服务器上获得像素完美的屏幕截图,与用户在其环境中看到的相同。
工程师根据需求专注于解决方案...
对于我们工程类型来说,这是很典型的,我们陷入了如何实施特定解决方案的困境。问题不清楚获取这些屏幕截图将解决什么问题,即基本要求。如果知道这一点,也许还有其他更简单的方法可用?
我的目标是拥有一个网站的图像(是的,就这么简单)。 我知道有像 html2canvas 这样的工具。但是我不希望客户端浏览器呈现屏幕截图。
一个原因是我使用了带有 webview 的 chrome 扩展,其本质上类似于 iFrame
。出于安全原因,无法为包含 iFrame
的网站呈现屏幕截图。
我也知道他们正在开发 natively support capturing website screenshots 的功能,但我想要一个跨浏览器的解决方案,而不是依赖于浏览器的可能性。所有这些都发生在服务器上,因此它应该可以通过命令行执行。
我现在做的是:
- 通过命令行打开浏览器
- 将焦点切换到浏览器window通过命令行
- 制作屏幕截图(在 mac 上截屏,在 Linux 上滚动)通过命令行
在这个基本级别上做它的缺点是图像包含状态栏、浏览器插件等。事实上,我只想拥有实际的 网站内容 而没有这些特定于应用程序的东西。
- 最糟糕的解决方案是针对每个浏览器 硬编码内容相对于 window 的 0|0 位置。这很糟糕(原因很明显)。
- 我想出的另一个解决方案是:告诉浏览器(我可以说话 通过套接字到插件)在 x:0;y:0; 添加类似 QR 码的内容,将屏幕截图发送到图像处理服务器。 之后删除二维码并再次发送屏幕截图。然后我 知道相对于 0|0 的每个点,但它也不是那么优雅。
最好的东西是命令行工具,它可以让我确定要捕获应用程序的哪个部分的图像。
一个例子是this plugin for Firefox or this server-side tool or all these tools providing screenshots of websites with different browsers and OS like this。我想知道他们是如何摆脱浏览器特定的 GUI 元素的。
加法:
我不知道我是否说得足够清楚,但我想要特定浏览器内容的屏幕截图,但没有浏览器特定的 GUI 元素。这意味着应用程序 运行 无头浏览器对我没有用。因为无头浏览器有自己的引擎。我特别想截取例如Firefox 版本 x.
大多数服务器端语言只提供 HTML 而从不渲染它。不久前,我 运行 研究了索引单页 javascript 应用程序的问题,其中一个解决方案是 phantomJS。
PhantomJS 完全可以满足您的需求。您可以渲染 HTML(服务端),Phantom 也内置了 canvas,因此您可以使用它进行截图。 Phantom 是 webkit,因此它将涵盖大多数流行的浏览器(Chrome、Safari、Opera)。如果您想查看该网站在 Firefox 上的外观,您可以尝试 SlimerJS(类似于 PhantomJs,但运行 Gecko 引擎)。
这将涵盖所有最流行的浏览器(IE 除外)。这仍然是一个无头解决方案,但您将能够看到不同的布局引擎。您将需要 NodeJS,这可能需要一点学习,但它们都有关于屏幕截图的文档。祝你好运!
有两种方法可以做到:
- 为 Firefox 创建插件或 Chrome
屏幕截图是通过在页面上创建 canvas 叠加层来截取的。图片取自文档,所以浏览器UI不是图片的一部分。
- 重新创建浏览器(PhantomJS、TrifleJS)
首先没有浏览器UI。
我过去曾有过一些运气 XULRunner
您可以尝试此处概述的例程:https://blog.builtwith.com/2010/07/02/mozilla-automated-website-screen-grabber/
它基本上运行 shell 的 Firefox 并自动执行抓取屏幕截图的过程。它可能需要一些调整,但我认为它可以满足您所写的要求。
Awesomescreenshot 将实际向下滚动页面以截取实际屏幕截图,然后将这些图像组合成一张长图供您使用。您甚至可以将其设置为仅捕获正在显示的页面部分或选定部分。
您可以将其与宏类型 program/scripting 语言混合使用,例如 Auto Hot Keys。您可能会或可能不会发现它比使用命令行更容易。我想这取决于你想做什么。
你知道硒吗? 它是一个实际打开特定浏览器并运行脚本测试的测试工具。 它也可以用来截屏。
This might be a solution to your problem.
有多种工具可以开源,也可以付费使用。但是,请牢记安全原因。我会建议您使用 'Save to Drive' 扩展名 Google 本身。
这将为您提供一种更安全的方式来将屏幕截图直接保存到您的 google 驱动器,并且与屏幕截图一起,它还允许用户将图片或其他文档保存到 google 驱动器。
// 第二个建议 //
如果您不想使用上述扩展,那么您可以使用 'Blipshot',它是一个开源工具,也可以在 GitHub.
上使用// 第三条建议 //
第三个最佳解决方案是全页屏幕截图。
这三个工具是 Google Chrome 以及其他浏览器中评价最高的屏幕截图工具中的少数几个。
希望对您有所帮助!
浏览器、版本和os平台的多种组合
要捕获特定浏览器和版本的网页截图,需要一个可以启动的框架,运行并在所有这些浏览器中捕获,此外,问题没有说明特定平台是否也需要它结合上述浏览器和版本,如 OSX、Windows、Linux、Android 等。这些平台的不同版本将进一步增加 possible组合。
- 您需要设置、维护这些浏览器
- 寻找或创建一个框架来驱动它们,Selenium 可能是您最好的选择
- 克服 Selenium 对某些 browser/OS 组合缺乏支持的问题
- 一个管理这个和 exposes 的基础设施,就像一个很好的 API 供使用
但是有现有的解决方案,或者相关的解决方案,例如:
关于在特定浏览器、版本、平台等中获取屏幕截图
http://browsershots.org/ 是免费的,并且有大量的浏览器组合os,不太清楚是否可以通过编程方式访问它。
只需调用现有的 API
即可完成此操作crossbrowsertesting.com 是一项似乎满足所有要求的商业服务(免费试用)。
拥有可以做到这一点的技术
http://usersnap.com 支持多种浏览器,包括桌面和移动浏览器,并且已经做了大量工作以在服务器上获得像素完美的屏幕截图,与用户在其环境中看到的相同。
工程师根据需求专注于解决方案...
对于我们工程类型来说,这是很典型的,我们陷入了如何实施特定解决方案的困境。问题不清楚获取这些屏幕截图将解决什么问题,即基本要求。如果知道这一点,也许还有其他更简单的方法可用?