2017-05-20 170 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)); 
相關問題