使用 Selenium Web 驱动程序拍摄页面

Take a page shoot with Selenium Web Driver

Take a screenshot with Selenium WebDriver 上的问题和答案包含关于如何使用不同语言使用 Selenium Web Driver 进行屏幕截图的出色描述。

我使用 Python 和 C# 以及一组不同的浏览器驱动程序来驱动我的 Web 驱动程序。

例如,如果屏幕截图是使用 Python 的 PhantomJS 无头浏览器截取的,我会得到整页截图。

在 C# 中,屏幕截图未直接作为驱动程序方法提供,因此需要一些代码(参见上述问题和建议的 C# 解决方案)。

然而,C# 配方虽然可以完美地拍摄屏幕截图,但这并不是我想要的。

问题是 C# 食谱需要截屏,而我正在寻找的是如何截取整页。屏幕截图应该是屏幕上看到的内容,浏览器页面通常比屏幕大。在许多情况下,拍摄的照片应该是页面照片。

这个问题与引用的问题在细微的问题细节上有所不同,这会导致结果有所不同。我想这里会欢迎针对不同语言的页面拍摄解决方案。

当前WebDriver中的截图API定义为整页截图。当您通过 WebDriver 截取屏幕截图时,无论您使用何种语言(Python、C#、Java 等),您都应该获得完整页面的截图。话虽如此,还是有一些注意事项需要注意。

对于 IE 驱动程序,如果您 运行 在 64 位 Windows 上使用 32 位 IEDriverServer.exe,您将看到您的屏幕截图 t运行适用于系统显示分辨率的最大尺寸,任何溢出都作为图像的黑色部分。这是由于用于允许 IE 驱动程序创建整页屏幕截图的 Windows 挂钩程序的限制。可以在 IE 驱动程序作者的 blog post 中找到更深入的细节。

Chrome的驱动只提供了screenshots of the visible view port. This is a known issue of the driver, and has been for some time, and cannot be fixed due to an underlying bug in the Chrome browser itself.

Safari 驱动程序的架构不允许完整的-DOM 屏幕截图。由于 Safari 浏览器提供的扩展点的性质有限,这不太可能改变。

最后,所有关于屏幕截图的讨论仅与当前 WebDriver 实现相关。 W3C working group creating a WebDriver spec has decided that screenshots should only be of the visible view port,因此此行为将来可能会改变,并且 允许屏幕截图。