如何使用 Selenium 和 Java 获取完整网页的屏幕截图?

新手上路,请多包涵

如何使用 Selenium WebDriver 截取整个网页的屏幕截图( _整页屏幕截图_),而不仅仅是部分( _从上到下_)?

我的代码: ( _Java 绑定_)

 System.setProperty("webdriver.chrome.driver","/home/alex/Downloads/chromedriver_linux64/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(RESULT_FILENAME));

关于如何解决这个问题的任何想法?

原文由 Placinta Alexandru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

LE: 我看到很多人对整页截图感兴趣,所以我想我可以用一些积极的东西( _银弹_)来更新答案。

有相当多的 Web 测试框架可以( _只需最少的设置和工作量_)生成 整页屏幕截图。我来自 NodeJS 测试环境,所以我只能保证以下内容: WebdriverIO 和 Google 的 Puppeteer

如果有人对使用 WebdriverIO 的简单方法感兴趣,请查看 答案。


简短的回答是 不,你不能, _如果你只使用硒_(详细原因如下)。但是,您可以做的是充分利用设备的(显示器) 视口

因此,使用 ChromeOptions() 启动浏览器实例(驱动程序),这是设置 ChromeDriver 特定功能的方法。我们可以做到以下几点:

  • 最大化窗口(使用 --start-maximized 开关);
  • 进入全屏( F11 上的键, Control+Cmd+F 在 Mac 上,使用 --start-fullscreen 开关)。
  • 注意:可以在 此处 找到 Chrome 命令行开关的完整列表。

您的代码应如下所示:

 // Setting your Chrome options (Desired capabilities)
ChromeOptions options = new ChromeOptions();
options.add_argument('--start-maximized');
options.add_argument('--start-fullscreen');

// Creating a driver instance with the previous capabilities
WebDriver driver = new ChromeDriver(options);

// Load page & take screenshot of full-screen page
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

Now regarding the full page problem, all drivers ( chromedriver , geckodriver , IEDriver , EdgeDriver , etc.) are implementing the WebDriver W3C 标准。因此,它们取决于 WebDriver 团队想要公开不同功能的方式,在我们的例子中是 “截屏”

如果您阅读定义,它会清楚地说明以下内容:

Take Screenshot 命令截取顶级浏览上下文的 VIEWPORT 的屏幕截图。

在传统方面,一些驱动程序能够生成整页屏幕截图( 在此处 阅读更多相关信息),例如旧的 FirefoxDriver、IEDriver 等。情况不再如此,因为它们现在都实现了(不折不扣)WebDriver W3C 标准。

原文由 iamdanchiv 发布,翻译遵循 CC BY-SA 4.0 许可协议

现在有了使用 Selenium 4 和 Firefox 的简单方法。

 byte[] imageBytes = ((FirefoxDriver)driver).getFullPageScreenshotAs(OutputType.BYTES);
Files.write(Paths.get(RESULT_FILENAME), imageBytes);

其他浏览器尚不支持 getFullPageScreenshotAs()

原文由 John29 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题