使用Selenium Web Driver进行页面拍摄

时间:2015-04-23 07:35:09

标签: c# python selenium selenium-webdriver

Take a screenshot with Selenium WebDriver上的问题和答案包含如何使用不同语言使用Selenium Web Driver拍摄屏幕截图的精彩描述。

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

例如,如果使用带有Python的PhantomJS无头浏览器截取屏幕截图,我将获得全页面截图。

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

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

问题是C#配方需要一个屏幕截图,而我正在寻找的是如何拍摄整页。屏幕截图预计会出现在屏幕上,浏览器页面通常比屏幕大。在许多情况下,拍摄的照片应该是可拍摄的。

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

1 个答案:

答案 0 :(得分:4)

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

对于IE驱动程序,如果您在64位Windows上运行并使用32位IEDriverServer.exe,您将看到屏幕截图被截断为系统显示分辨率的最大大小,任何溢出作为图像的黑色部分。这是由于Windows钩子程序的局限性,这些程序用于允许IE驱动程序创建整页截图。 IE驱动程序的作者可以在blog post中找到更详细的详细信息。

Chrome的驱动程序仅提供screenshots of the visible view port。这是驱动程序的已知问题,并且已经存在了一段时间,并且由于基础bug in the Chrome browser itself而无法修复。

Safari驱动程序的体系结构不允许使用完整的DOM屏幕截图。由于Safari浏览器提供的扩展点的性质有限,因此不太可能发生变化。

最后,关于屏幕截图的所有讨论仅与当前 WebDriver实现相关。创建W3C working groupWebDriver spec已确定屏幕截图应仅为visible view port,因此此行为将来可能会发生变化,允许截图视口。