chromedriver是谷歌浏览器驱动,用来模拟谷歌运行操作的一个工具,本文主要讲解Java后端利用此插件进行网页截图,并且适配Linux部署。

环境准备

Wondows服务器或电脑

本机需安装Chrome谷歌浏览器,根据本机浏览器版本,下载对应的chromedriver版本,chromedrive插件下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/,下载后解压即可。PS:网上看到许多需要配置环境变量的,实测根本不需要。

注意:插件版本和本机浏览器版本一定要对应

Linux服务器

安装Chrome

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

查看版本

google-chrome --version

根据版本下载插件,chromedrive插件下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/,选择Linux版,上传到服务器后解压,上面默认安装最新版本。

// 解压
unzip chromedriver_linux64.zip
// 赋权
chmod 777 chromedriver
// 安装浏览器中文字体
yum -y groupinstall Fonts

Java代码部分

引入maven

 <!-- 浏览器截图jar包 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0-jre</version>
</dependency>

截图工具方法类

代码里面用到的是ChromeDriverService启动,还有一种是:

ChromeDriver driver = new ChromeDriver(options);

System.setProperty("webdriver.chrome.driver", "/data/server/legal-document-library-task/chromedriver");

这种在高并发,频繁截图时会遇到ChromeDriver插件未正常关闭的情况,会占用端口或内存。推荐使用ChromeDriverService方式。

public String imgUntil(String url){
ChromeDriver driver = null;
FileInputStream inputFile = null;
ChromeDriverService service = null;
try {
//(推荐),利用ChromeDriverService启动
//这里"/data/server/legal/chromedriver"是下载的驱动路径,Windows对应chromedriver.exe Linux对应chromedriver,具体路径看你把驱动放在哪
service = new ChromeDriverService.Builder().usingDriverExecutable(new File("/data/server/legal/chromedriver")).usingAnyFreePort().build();
service.start();
ChromeOptions options = new ChromeOptions();
//ssl证书支持
options.setCapability("acceptSslCerts", true);
//截屏支持
options.setCapability("takesScreenshot", true);
//css搜索支持
options.setCapability("cssSelectorsEnabled", true);
//设置浏览器参数
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.addArguments("--disable-gpu");
options.addArguments("--disable-dev-shm-usage");
options.setHeadless(true);
driver = new ChromeDriver(service,options);
//设置超时,避免有些内容加载过慢导致截不到图
driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MINUTES);
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MINUTES);
driver.manage().timeouts().setScriptTimeout(1, TimeUnit.MINUTES);
//设置需要访问的地址
driver.get(url);
Thread.sleep(2000);
//获取高度和宽度一定要在设置URL之后,不然会导致获取不到页面真实的宽高;
Long width = (Long)driver.executeScript("return document.documentElement.scrollWidth");
Long height =(Long) driver.executeScript("return document.body.parentNode.scrollHeight");
System.out.println("高度:"+height);
/*//这里按照网页需求有些是滑动的时候才加在的,如ajax的异步加载
long temp_height = 0;
while (true) {
//每次滚动500个像素,因为懒加载所以每次等待2S 具体时间可以根据具体业务场景去设置
driver.executeScript("window.scrollBy(0,500)");
temp_height += 500;
if(temp_height>=height){
break;
}
}*/
//设置窗口宽高,设置后才能截全
driver.manage().window().setSize(new Dimension(width.intValue(), height.intValue()));
File srcFile = driver.getScreenshotAs(OutputType.FILE);
// 这里的需求是将图片转为Base64码后换回,实际按需求控制
inputFile = new FileInputStream(srcFile);
byte[] buffer = new byte[(int)srcFile.length()];
inputFile.read(buffer);
String content = new BASE64Encoder().encode(buffer);
return content; //设置截图文件保存的路径
//String screenshotPath = "C:\\wenjian\\YA\\imgGG1.png";
//FileUtils.copyFile(srcFile, new File(screenshotPath));
}catch (Exception e){
e.printStackTrace();
log.error("截图失败:"+e);
return null;
}finally {
try{
if (inputFile != null){
inputFile.close();
}
}catch (Exception ee){ }
if (driver!= null){
driver.quit();
service.stop();
}
}
}

Java利用ChromeDriver插件网页截图(Wondows版+Linux版)的更多相关文章

  1. Java 反编译工具 —— JAD 的下载地址(Windows版/Linux版/Mac OS 版)

    Java 反编译工具 —— JAD 的下载地址. 各种版本哦! Windows版,Linux版,Mac OS 版,等等 下载地址: http://varaneckas.com/jad/

  2. FinalShell Mac OS版,Linux版安装及教程

    该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以后会支持. 该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以 ...

  3. FinalShell Mac OS版,Linux版安装及教程(Mac下的xshell)

    用户QQ群 342045988 Mac版安装路径/Applications/finalshelldata Linux版安装路径/usr/lib/finalshelldata 注意:1.FinalShe ...

  4. ping IP 带时间戳循环显示并写入日志(windos版+linux版)

    在工作中,判断网络是否通畅,首选命令就是ping,但有时候我们需要持续ping一个或多个地址时,需要加 -t 即可,但有时候需要在ping的时候加入时间戳并把ping记录写入到日志里面,方法如下: w ...

  5. 使用PhantomJS实现网页截图服务

    这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...

  6. java实现网页截图

    使用工具 java+selenium+phantomjs /chromedriver /firefox 1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件2 ...

  7. 如何以Java实现网页截图技术

    转自   http://blog.csdn.net/cping1982/article/details/5353049 今天看到某网友关于“如何以Java实现网页截图技术”的咨询帖,由于出现该咨询的地 ...

  8. 如何利用WebSocket实现网页版聊天室

    花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...

  9. Chrome插件-网页版BusHound

    Chrome插件-网页版BusHound

  10. 利用JavaScript将页面截图生成图片传给后台的插件:html2canvas

    利用JavaScript将页面截图生成图片传给后台的插件:html2canvas 一.总结 一句话总结: 10 <script type="text/javascript"& ...

随机推荐

  1. 【安卓】使用Handler出现的警告

    使用Handler出现的警告 零.原由 安卓中使用Hander时出现了如下警告: This Handler class should be static or leaks might occur (a ...

  2. javascript 字符串截取

    <script> //字符截取(需要的字符长度) function cut_str(need_str_length){     var bag_set = document.getElem ...

  3. word突然无法转换latex公式的解决尝试

    正常情况下我在word插入复制的latex公式步骤如下(以\(\mu\neq 10\)为例): 把\(\mu\neq 10\)粘贴到word文档中,选中\(\mu\neq 10\)并同时按下alt和等 ...

  4. AI团队比单打独斗强!CrewAI多智能体协作系统开发踩坑全解析

    AI团队比单打独斗强!CrewAI多智能体协作系统开发踩坑全解析 阅读时间: 5分钟 | 字数: 1500+ "你是否曾为单个大模型难以解决复杂专业问题而苦恼?是否想过,如果能像组建专业团队 ...

  5. springboot 集成Swagger2报错 Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is

    springboot 集成Swagger2报错 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is ...

  6. Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!

    近期,Apache DolphinScheduler进行了版本更新,发布了3.3.0 alpha版本.Apache DolphinScheduler 3.3.0 alpha版本在任务管理.容错能力.扩 ...

  7. Source Tree ssh配置

    此链接中的gitlab和github使用ssh是一样的 https://blog.csdn.net/u014222765/article/details/78909074 注意在生成公钥后,要手动复制 ...

  8. windows下jdk版本切换(bat)

    1.jdk下载 Oracle官网 https://www.oracle.com/cn/ 资源->下载->Java下载 jdk当前最新版本 jdk22版本 jdk8版本 当前页面向下拉 2. ...

  9. 【问题解决】centos7已经不维护了,如何继续使用yum源?

    背景 CentOS 7 已于2024年6月30日停止维护,在停止维护后我们之前配置的国内镜像源大多都是空目录了,即在线国内镜像源不可用,就像下边这样提示: [root@bogon yum.repos. ...

  10. 掌握Tortoise-ORM高级异步查询技巧

    title: 掌握Tortoise-ORM高级异步查询技巧 date: 2025/04/22 12:05:33 updated: 2025/04/22 12:05:33 author: cmdrago ...