2017-05-20 172 views
5

如何为整个网页制作截图,而不仅仅是使用Selenium WebDriver的顶部截图?我的Selenium WD java代码如下: System.setProperty(“webdriver.chrome.driver”,“/ home/alex/Downloads/chromedriver_linux64/chromedriver”);如何使用Selenium和java获取完整网页的截图?

WebDriver driver = new ChromeDriver(); 
    driver.get("http://google.com"); 
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

    FileUtils.copyFile(scrFile, new File(RESULT_FILENAME)); 

有什么想法吗?

+0

我有一个答案,但我想确认是否适合您。那么你能否考虑详细说明你的意思是“完整的整个网页,而不仅仅是使用硒的顶部”?谢谢 – DebanjanB

回答

3

简短的回答是不,你不能(详细的原因)。但是,您可以做的就是充分利用设备的(显示器)viewport

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

  • 最大化窗口(使用--start-maximized开关);
  • 全屏(F11 -key在Windows上,Control+Cmd+F在Mac上,使用--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标准。

-3
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
FileUtils.copyFile(scrFile, new File("c:\\RESULT_FILENAME.png")); 

试试这个

+1

您是否花时间至少阅读了这个问题,或者他提供的剪辑? – iamdanchiv

+1

这个答案完全是题外话 – raffamaiden

0

对于我需要截取页面开始和结束的部分页面。所以我使用2个屏幕截图:

public static String javaIoTmpDir = System.getProperty("java.io.tmpdir"); //tmp dir 
//create screenshot 
    driver.manage().window().fullscreen(); 
    //For large pages - body over 850 px highh - take addition screenshot of the end of page 
    if (driver.findElements(By.id("panel_body")).size()>0) { 
     WebElement body = driver.findElement(By.id("panel_body")); 
     int bodyHight = body.getSize().getHeight(); 
     if (bodyHight > 850) { 
      Robot robot = new Robot(); 
      robot.keyPress(KeyEvent.VK_END); 
      robot.keyRelease(KeyEvent.VK_END); 
      Thread.sleep(1000); 
      File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
      String timePictureEnd = javaIoTmpDir+"\\scr_"+String.valueOf(System.currentTimeMillis())+getClass().toString().substring(getClass().toString().lastIndexOf(".qa.")+3)+".png"; 
      FileUtils.copyFile(scrFile, new File(timePictureEnd)); 
      robot.keyPress(KeyEvent.VK_HOME); //back to top page for next screen 
      robot.keyRelease(KeyEvent.VK_HOME); 
      Thread.sleep(1000); 
     } 
    } 
    String timePicture = javaIoTmpDir+"\\scr_"+String.valueOf(System.currentTimeMillis())+getClass().toString().substring(getClass().toString().lastIndexOf(".qa.")+3)+".png"; 
    File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
    FileUtils.copyFile(scrFile, new File(timePicture)); 
相关问题