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/