【问题标题】:Take a page shoot with Selenium Web Driver使用 Selenium Web Driver 进行页面拍摄
【发布时间】:2015-04-23 07:35:09
【问题描述】:

Take a screenshot with Selenium WebDriver 上的问答包含了如何使用 Selenium Web Driver 使用不同语言截屏的精彩描述。

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

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

在C#中截图不直接作为驱动方法提供,所以需要一些代码(见上面提到的问题和建议的C#解决方案)。

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

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

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

【问题讨论】:

  • 我认为解决这个问题的唯一方法是在代码中设置浏览器窗口的大小。这样,屏幕截图与画布大小直接相关。这可能有助于您的驱动程序实例化:_driver.Manage().Window.Size = new System.Drawing.Size(1280, 5000); (或任意大高度!)
  • driver.Manage().Window.Size 设置物理窗口大小(我使用它来更改某些浏览器上的窗口大小,这些浏览器在 webdriver 启动时具有相当小的窗口)。当页面比页面长/宽时,我会假设画布也随着内容获得滚动条而更大。会尝试这个食谱并反思。

标签: c# python selenium selenium-webdriver


【解决方案1】:

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

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

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

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

最后,所有关于屏幕截图的讨论仅与 当前 WebDriver 实现相关。创建WebDriver specW3C working group 已决定仅对visible view port 进行屏幕截图,因此此行为将来可能会改变,并且允许对视口进行屏幕截图。 p>

【讨论】:

  • 非常感谢您提供如此深入的见解。
  • +1 吉姆......这个答案中有很多信息。我完全明白为什么 W£C 组会选择默认只显示视口。也许这将允许进一​​步扩展以显式截取整个画布,从而标准化跨浏览器的行为。
  • 来自战场。尝试过 IE9、FF37 和 Chrome 42 - FF 和 IE 拍摄完整的画布。 Chrome 获取可见部分。会尝试更多。只是想在考虑跨浏览器功能时认可 Jim 的回答作为出色的指导方针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多