如何使用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
开关); F11
-key,在Mac上为Control+Cmd+F
,使用--start-fullscreen
开关)。 // 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);
现在关于整页问题,所有驱动程序(
chromedriver
,geckodriver
,IEDriver
,EdgeDriver
等)都在实现WebDriver W3C标准。因此,它们取决于WebDriver团队希望公开不同功能(在我们的情况下为'Take Screenshot')的功能的方式。如果您阅读该定义,则它明确指出以下内容:
从旧的角度来看,某些驱动程序能够生成完整的屏幕截图(请阅读有关here的更多信息),例如旧的FirefoxDriver,IEDriver等。现在已经全部实现了(按字母顺序)WebDriver,情况已不再如此W3C标准。