java WebDriver + selenium 呼叫 谷歌驅動 chromedriver 實現 在 liunx 環境下 無介面 截圖 加自動獲取頁面最大真實頁面內容高寬 加各型別踩坑日記

2020-08-14 11:06:38

目錄

1.介紹

2.結果效果

2.1大圖

2.2細節小圖

3.依賴

4.程式碼

4.1引入

4.2具體程式碼

4.3執行

5.Linux下安裝chrome和chromedriver

5.1yum安裝

5.2下載下來安裝

5.3安裝必要的庫

6.安裝chromedriver,下載、解壓、加許可權

7.liunx 設定 驅動可執行許可權 解決 無法執行驅動問題

7.1問題

7.2解決方案(賦予可執行許可權)

8.linux 設定 中文編碼 解決截圖亂碼問題

8.1centos6

8.2centos7 8



1.介紹

  • 1.呼叫webdriver
  • 2.使用驅動
  • 3.給劉劉覽器驅動賦予可執行許可權
  • 4.設定程式碼和系統中文語言套件
  • 5.ok 

 

2.結果效果

2.1大圖

 

2.2細節小圖

 

3.依賴

<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>3.9.1</version>
		</dependency>

 

4.程式碼

 

4.1引入

import java.io.File;
import java.util.concurrent.TimeUnit;

import javax.swing.JPanel;

import org.openqa.selenium.Dimension;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;

 

4.2具體程式碼

package com.superman.global.service;




/**
 * 網頁轉圖片
 * 
 * @author yushen
 *
 */
@Service
public class HtmlToImgPngUitl{
   
	/**
	 * 網頁轉圖片
	 * 
	 *
	 * @param savePath  儲存圖片地址
	 * @param url	存取網頁地址
	 * 
	 * @return boolean
	 */
	public boolean saveHtml(String savePath,String url){
		 
		// 谷歌驅動地址
		String path ="";
		String os = System.getProperty("os.name");  
		if(os.toLowerCase().startsWith("win")){  //微軟系統
			path+="d:/test/999/chromedriver.exe";
		}else{//linux系統
			path+="/lspt/bigdatapro/chromedriver/chromedriver";
		}  
		
        File file = new File(path);// path: chromedirver.exe檔案路徑
        ChromeDriverService service =new  ChromeDriverService.Builder().usingDriverExecutable(file).usingAnyFreePort().build(); // 新建service 方便後面關閉chromedriver
        WebDriver driver = null;
        try {
            service.start(); // 開啓服務
            ChromeOptions chromeOptions = new ChromeOptions();

            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("--no-sandbox");//無頭瀏覽器

            chromeOptions.addArguments("--disable-gpu");//無介面
            chromeOptions.addArguments("lang=zh_CN.UTF-8");
            
            //設定必要參數
//            DesiredCapabilities dcaps = new DesiredCapabilities();
            //ssl證書支援
            chromeOptions.setCapability("acceptSslCerts", true);
            //截圖支援
            chromeOptions.setCapability("takesScreenshot", true);
            //css搜尋支援
            chromeOptions.setCapability("cssSelectorsEnabled", true);

            //生成無頭瀏覽器
            driver = new ChromeDriver(service, chromeOptions);
            //設定隱性等待
            driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
            long start = System.currentTimeMillis();
            //開啓頁面
            driver.get(url);
            // 獲取頁面尺寸
            Long width = (Long) ((ChromeDriver) driver).executeScript("return Math.max(document.body.scrollWidth, " +
                    "document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement" +
                    ".scrollWidth, document.documentElement.offsetWidth);");

            Long height = (Long) ((ChromeDriver) driver).executeScript("return Math.max(document.body.scrollHeight, " +
                    "document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement" +
                    ".scrollHeight, document.documentElement.offsetHeight);");
//          重新設定頁面尺寸
            Dimension dimension = new Dimension(width.intValue()+100, height.intValue());
            driver.manage().window().setSize(dimension);
            Thread.sleep(3000L);
            
            //指定了OutputType.FILE做爲參數傳遞給getScreenshotAs()方法,其含義是將擷取的螢幕以檔案形式返回。
            File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            Thread.sleep(2000L);
            FileCopyUtils.copy(srcFile, new File(savePath)); // 複製檔案 savePath:圖片儲存路徑
           System.out.println("圖片生成完畢,耗時:{}ms"+ (System.currentTimeMillis() - start));
           return true;
        } catch (Exception e) {
        	System.out.println("儲存異常,e="+ e.getMessage());
        } finally {
        // 關閉服務
            driver.quit();
            service.stop();
        }
		return false;
    }
    
   
}

 

4.3執行

 public static void main(String[] args) {
    	System.out.println("start");
    	new HtmlToImgPngUitl().saveHtml(
    			"d:/test/999/00aaaaaaaaaaa2.png"
    			,"https://blog.csdn.net/weixin_42749765");

    	System.out.println("end");
    }

5.Linux下安裝chrome和chromedriver

5.1yum安裝

 yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

5.2下載下來安裝

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
yum install ./google-chrome-stable_current_x86_64.rpm

5.3安裝必要的庫

yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

我沒裝上,但也無傷大雅哈哈

6.安裝chromedriver,下載、解壓、加許可權

> wget  http://npm.taobao.org/mirrors/chromedriver/
> unzip chromedriver_linux64.zip
> chmod +x /usr/bin/chromedriver

哦了

 

7.liunx 設定 驅動可執行許可權 解決 無法執行驅動問題

7.1問題

  • linux 系統java自動化啓動google瀏覽器 提示:The driver is not executable: /home/chromedriver_linux64/chromedriver

7.2解決方案(賦予可執行許可權)

chmod a+x chromedriver

 

8.linux 設定 中文編碼 解決截圖亂碼問題

8.1centos6

yum -y install fonts-chinese 

8.2centos7 8

 yum  groupinstall  "fonts"

然後重新啓動即可,我之前沒重新啓動也ok ,不得瑟哈哈

然後截圖就是中文不亂嗎嘍

 

 

ok

 

持續更新