CentOS中使用Java实现网页截屏

最近项目中遇到一个需要给指定网页截图保存的功能,网上查了下如何实现,在这里记录一下

前言

1.centos安装chrome

  • 添加 Chrome Yum 源
    在 yum.repos.d 内创建google-chreom.repo:
$ vim /etc/yum.repos.d/google-chrome.repo
# 拷贝以下内容到该文件内:

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
  • 安装 Chrome
    使用以下命令安装Chrome浏览器:
    # 由于谷歌域名可能在国内无法访问,可以使用`--nogpgcheck`关闭gpgcheck进行安装
    $ yum -y install google-chrome-stable --nogpgcheck

2.下载centos中chrome版本对应的chromedriver

  • 检查当前安装的chrome版本

    $ google-chrome --version
    Google Chrome 121.0.6167.85 # 当前安装的chrome版本为121.0.6167.85
  • 在以下两个网站找到对应版本的chromedriver下载

    https://chromedriver.chromium.org/downloads (一般比最新版本落后几个版本)

    https://googlechromelabs.github.io/chrome-for-testing/ (最新版本)

  • 下载121.0.6167.85到centos中

    # 安装解压工具,已安装择跳过
    sudo yum install -y unzip
    # 切换应用工作目录,根据实际情况自行修改
    cd ~/selenium-demo
    # 下载chromedriver
    wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/121.0.6167.85/linux64/chromedriver-linux64.zip
    # 解压文件
    unzip chromedriver-linux64.zip
    

3.使用java来打开网页并截图

  • 添加maven依赖
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.16.1</version>
</dependency>
  • 演示代码
import cn.hutool.core.io.FileUtil;
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.ChromeOptions;

/**
 * @since 2024/1/26 17:09
 */
public class Demo {

    public static void main(String[] args) {
        // 修改为自己的实际目录
        String workDir = "/home/haojie.shi/selenium-demo/";
        // 设置浏览器驱动路径
        System.setProperty("webdriver.chrome.driver", workDir + "chromedriver-linux64/chromedriver");
        ChromeOptions chromeOptions= new ChromeOptions();//设置为 headless 模式 (必须)
        chromeOptions.addArguments("--headless");//设置浏览器窗口打开大小 (非必须)
        chromeOptions.addArguments("--window-size=1920,1080");

        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("https://www.baidu.com");
        // 截图
        java.io.File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        // 保存截图
        try {
            FileUtil.copyFile(screenshotAs, new java.io.File(workDir+ "screenshot.png"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 关闭浏览器
        driver.quit();
    }
}
  • 打包复制jar包到centos中
$ scp ./target/selenium-demo-1.0-SNAPSHOT-jar-with-dependencies.jar haojie.shi@dev02-local.askdr.cn:~/selenium-demo/
  • 运行并检查运行结果
# 切换工作目录,根据实际情况自行修改
$ cd ~/selenium-demo
# 运行java程序
$ java -jar selenium-demo-1.0-SNAPSHOT-jar-with-dependencies.jar
# 检查是否生成截图
$ ls -al
总用量 34028
drwxrwxr-x.  3 haojie.shi haojie.shi      148 1月  30 11:03 .
drwx------. 22 haojie.shi haojie.shi     4096 1月  30 10:54 ..
drwxrwxr-x.  2 haojie.shi haojie.shi       54 1月  30 10:48 chromedriver-linux64
-rw-rw-r--.  1 haojie.shi haojie.shi  8643026 1月  21 05:51 chromedriver-linux64.zip
-rw-------.  1 haojie.shi haojie.shi    30328 1月  30 11:03 screenshot.png ## 成功截图
-rw-r--r--.  1 haojie.shi haojie.shi 26158965 1月  30 11:03 selenium-demo-1.0-SNAPSHOT-jar-with-dependencies.jar

4.解决中文乱码

adobe开源中文字体 https://github.com/adobe-fonts/source-han-serif


# 创建中文字体目录
mkdir -p /usr/share/fonts/chinese/

# 切换到中文字体目录
cd /usr/share/fonts/chinese/

# 下载中文字体(也可以自行查找喜欢的中文字体)
wget https://github.com/adobe-fonts/source-han-serif/raw/release/Variable/TTF/SourceHanSerifSC-VF.ttf

# 为刚加入的字体设置缓存使之有效
fc-cache -fv

# 查看系统中的字体
fc-list

CentOS中使用Java实现网页截屏
http://example.com/2024/11/13/centos-java-seleniumhq/
作者
John Doe
发布于
2024年11月13日
许可协议