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

我的代码:(Java绑定(bind))

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));

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

最佳答案

LE:我看到很多人都对整页屏幕截图感兴趣,因此我想我可能会用一些肯定的答案(银色的项目符号)来更新答案。

有很多Web测试框架可以(只需最少的设置和工作)即可生成全页截图。我来自NodeJS测试环境,因此只能担保以下内容:WebdriverIO和Google的Puppeteer

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

简短的答案是否,如果您仅使用Selenium(请在下面详细说明),则不能。但是,您可以做的是充分利用设备的(显示器)viewport

因此,请使用ChromeOptions()来启动浏览器实例(驱动程序),这是用于设置ChromeDriver特定功能的方法。我们可以执行以下操作:

  • 最大化窗口(使用--start-maximized开关);
  • 全屏显示(在Windows上为F11 -key,在Mac上为Control+Cmd+F,使用--start-fullscreen开关)。
  • 注意:Chrome命令行开关的完整列表可以在here中找到。


  • // 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);
    

    现在关于整页问题,所有驱动程序(chromedrivergeckodriverIEDriverEdgeDriver等)都在实现WebDriver W3C标准。因此,它们取决于WebDriver团队希望公开不同功能(在我们的情况下为'Take Screenshot')的功能的方式。

    如果您阅读该定义,则它明确指出以下内容:



    从旧的角度来看,某些驱动程序能够生成完整的屏幕截图(请阅读有关here的更多信息),例如旧的FirefoxDriver,IEDriver等。现在已经全部实现了(按字母顺序)WebDriver,情况已不再如此W3C标准。

    07-24 09:39
    查看更多