java如何网页截屏?selenium来搞定
ninehua 2024-12-06 18:07 25 浏览
背景
需求一直有,今年比较多,如题,工作中遇到网页截图这样的需求,本着效果好,功能全又稳定的意图,去网上搜索相关技术,像HTML2Image、cssbox、selenium等,还有很多其他的技术,这篇文章主要说说我测试使用并能满足需求的cssbox,selenium。
Cssbox
CSSBox是一个用纯Java编写的(X)HTML/CSS渲染引擎。它的主要目的是提供关于呈现的页面内容和布局的完整和进一步可处理的信息。 但是,它也可以用于浏览Java Swing应用程序中呈现的文档。核心CSSBox库还可以用于获得所呈现的文档的位图或矢量(SVG)图像。 使用SwingBox包,CSSBox可以用作Java Swing应用程序中的交互式Web浏览器组件。
官网地址:http://cssbox.sourceforge.net/
使用
1引入maven依赖
<!--网站转换为图片cssbox-->
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>cssbox</artifactId>
<version>5.0.0</version>
</dependency>
2使用
@Test
public void cssboxTest(){
try {
ImageRenderer render = new ImageRenderer();
//网络链接的html
String url = "https://www.zhangbj.com/p/524.html";
//文件保存路径
String path = "C:\\Users\\Administrator\\Desktop"+File.separator+"html.png";
FileOutputStream out = new FileOutputStream(new File(FilenameUtils.normalize(path)));
//开始截屏
render.renderURL(url, out);
} catch (Exception e) {
e.printStackTrace();
}
}
3结果
样式可能出现问题,中文有时候乱码
Selenium
1引入依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
2相关准备
selenium+chromedriver谷歌驱动+chrome浏览器
1.注意谷歌驱动的版本要和谷歌浏览器的版本一样或者版本最相近
2.注意chromedriver谷歌驱动需要放在jdk安装目录下,具体路径为xxx/bin/chromedriver.exe,在linux和window中操作一样,这样切换系统是就无需改代码。
3.需要安装谷歌浏览器
谷歌驱动下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/
3使用
@Slf4j
public class Html2ImageUtil {
/**
* 将HTML转为图片,并保存至指定位置
* @param url 页面地址
* @param targetPath 保存地址(包含图片名,如 /images/test.png)
* @return
*/
public static String htmlToImage(String url, String targetPath) {
if (StringUtils.isEmpty(url) || StringUtils.isEmpty(targetPath)) {
throw new RuntimeException("截图失败!缺少必填项");
}
// 休眠时长
Integer sleepTime = 3 * 1000;
// 无头模式
System.setProperty("java.awt.headless", "true");
//获取谷歌配置信息
ChromeOptions chromeOptions = getChromeOptions();
// 配置信息中有默认窗口大小,也可以单独设置窗口大小
chromeOptions.addArguments("--window-size=1920,6000");
//创建webdriver 谷歌驱动
WebDriver driver = new ChromeDriver(chromeOptions);
//也可以通过如下方式设置窗口大小
// Dimension dimension = new Dimension(1000, 30);
// driver.manage().window().setSize(dimension);
try {
//加载页面
driver.get(url);
//等待加载页面
Thread.sleep(sleepTime);
//截屏
File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
//保存到指定位置
FileUtils.copyFile(srcFile, new File(FilenameUtils.normalize(targetPath)));
} catch (InterruptedException | IOException e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
} finally {
driver.quit();
}
log.info("截图成功!");
return targetPath;
}
/**
* 获取chrome配置信息
* 注意 chromedriver谷歌驱动需要放在jdk安装目录下,具体路径为xxx/bin/chromedriver.exe ,在linux和window中操作一样
* @return
*/
public static ChromeOptions getChromeOptions() {
ChromeOptions options = new ChromeOptions();
//获取当前操作系统
String os = System.getProperty("os.name");
//获取jdk安装目录,需要提前将谷歌驱动放进jdk的bin目录下,在linux和window中操作一样
String sysPath = System.getProperty("java.home").replace("jre", "bin");
String chromeDriver = sysPath + File.separator+"chromedriver.exe";
options.addArguments("disable-infobars");
//设置为 headless 模式,不需要真实启动浏览器
options.setHeadless(true);
//options.addArguments("--headless");
options.addArguments("--dns-prefetch-disable");
options.addArguments("--no-referrers");
options.addArguments("--disable-gpu");
options.addArguments("--disable-audio");
options.addArguments("--no-sandbox");
options.addArguments("--ignore-certificate-errors");
options.addArguments("--allow-insecure-localhost");
options.addArguments("--window-size=1920,6000"); // 窗口默认大小
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36";
userAgent = "user-agent=" + userAgent;
options.addArguments(userAgent);
// 设置chrome二进制文件
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
// 设置驱动
System.setProperty("webdriver.chrome.driver", chromeDriver);
log.debug("结束获取chrome配置信息");
return options;
}
测试
public static void main(String[] args) {
htmlToImage("https://www.cnblogs.com/tester-ggf/p/12602211.html","C:\\Users\\Administrator\\Desktop\\aaa.png");
}
效果十分完美
总结
最完美的方案就是selenium+chromedriver谷歌驱动+chrome浏览器,无需多说,用吧。
您的赞和关注是对我创作的最大肯定谢谢大家!
相关推荐
- VMware ESXI系统镜像定制
-
为什么要定制ESXi镜像呢?原因很简单,那就是H3C比较老的服务器,比如我用的UISR390XG2服务器,是没有适配的ESXi部署镜像的。而我要部署的H3CloudOS添加节点时只能选择H3C...
- 最新保姆级、超详细介绍VMware的使用(一)软件的安装
-
一、VMware简介VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMware采用了完全不同的概...
- 微软提供免费Windows 11 虚拟机下载
-
据ZDNet11月23日报道,微软(Microsoft)提供了免费的Windows11企业版虚拟机以供下载。针对开发人员,微软表示,“通过使用带有最新版本的Windows、开发工具、sdk和准备好的...
- VMware Workstation Pro 17.5安装包下载安装教程
-
软件简介VMwareWorkstationPro17.5是一款专业功能最强大的虚拟机软件,用户可以在虚拟机同时运行各种操作系统,进行开发、测试、演示和部署软件,虚拟机中复制服务器、台式机和平板环...
- VMware vCenter Server 8.0U3c 发布下载,修复 U3b 更新停止响应的问题
-
VMwarevCenterServer8.0U3c发布下载,修复U3b更新停止响应的问题VMwarevCenterServer8.0U3c发布下载-集中式管理vSphere...
- 最新整套VMware Workstation 15 Pro 官方简体中文版 + 永久密钥
-
VMwareWorkstation是深受全球用户信赖并屡获殊荣的虚拟机软件。它可以在单台PC上运行多个、多平台、多层面的操作系统与应用程序。并且支持快照和克隆,支持物理机与虚拟机间复制、移动,交...
- VMware16虚拟机安装教程
-
系统装机教程也告一段落,接下来秋水给大家讲讲虚拟机的安装,这里呢虚拟机选择VMware。一、安装教程1、在软件官网下载VMware安装包,或者在后台回复获取秋水下载好的安装包。2、双击软件进行安装,并...
- VMware虚拟机12.1下载:修复Win10镜像识别错误等问题
-
IT之家讯12月9日消息,虚拟机软件VMwareWorkstation迎来12.1更新版本,本次更新为维护性更新,修复了之前版本中存在的一些问题,比如将Win10首个重大更新ISO镜像错误识别为W...
- VMware vCenter Server 8.0U3b 发布下载,新增功能概览
-
VMwarevCenterServer8.0U3b发布下载,新增功能概览ServerManagementSoftware|vCenter请访问原文链接:https://sysin.or...
- 下载VMware虚拟机:打造全能多系统桌面,让IT技术探索触手可及!
-
VMware虚拟机打造全能多系统桌面,助力IT技术探索在当今科技飞速发展的时代,IT技术正以前所未有的速度渗透到生活和工作的方方面面。无论是智能硬件、移动应用还是云计算服务,都离不开IT技术的支撑。掌...
- 如何在vmware workstation player虚拟机上安装VMware Tools工具
-
版本:vmwareworkstation16player&ubuntu64位。首先我们使用vmwareworkstation16player启动ubuntu64位虚拟机,然后点击虚...
- VMware与CentOS安装配置指南
-
以下是一份详细的VMware虚拟机安装、配置及CentOS系统安装配置的指南,适合新手逐步操作:一、VMware虚拟机安装与配置下载并安装VMware下载地址:访问VMware官网,选...
- VMware虚拟机与物理机文件交互,这8种方法送给你
-
上一期我们讲解过用VMWare虚拟机打造一个金刚不坏之身的操作系统,小伙伴们反应说方法不错,只是虚拟机与物理机文件交互方式不好操作,这期应小伙伴们的要求,给大家讲解下虚拟机与物理机文件交互的8种方式,...
- VMware 17.0 Pro 版本正式发布,还有适配MacOS 的 Fusion 13 Pro下载
-
VMware17.0Pro官方下载地址:【点击获取】私聊VMware17.0Pro的新功能特性容器和Kubernetes支持使用vctlCLI构建/运行/拉/推容器映像。支持在Works...
- VMware Tools安装失败?手把手教你本地安装
-
VMwareTools安装失败?作为虚拟机与物理机之间的"桥梁",VMwareTools能实现文件拖拽、剪贴板共享、分辨率自适应等关键功能。没有它,VMware虚拟机就变得非常不好...