首页 > 系统相关 >Java利用ChromeDriver插件网页截图(Wondows版+Linux版)

Java利用ChromeDriver插件网页截图(Wondows版+Linux版)

时间:2023-02-09 11:22:22浏览次数:63  
标签:chromedriver 插件 driver height ChromeDriver Linux new options

** 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版,上面默认安装最新版本。

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>

截图工具方法类

public String imgUntil(String url){
        ChromeDriver driver = null;
        FileInputStream inputFile = null;
        ChromeDriverService service = null;
        try {
            //方法一(推荐),利用ChromeDriverService启动
            //这里"/data/server/legal-document-library-task/chromedriver"是下载的驱动路径,Windows对应chromedriver.exe Linux对应chromedriver,具体路径看你把驱动放在哪
            service = new ChromeDriverService.Builder().usingDriverExecutable(new File("/data/server/legal-document-library-task/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);
            /*//这里需要模拟滑动,有些是滑动的时候才加在的
            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);
            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();
            }
        }
    }

标签:chromedriver,插件,driver,height,ChromeDriver,Linux,new,options
From: https://www.cnblogs.com/zlnp/p/17104620.html

相关文章

  • linux批量改密码ansible实战(转)
    使用Ansible的user模块批量修改远程客户机的用户密码[root@localhostansible]#catroot_passwd.yaml----hosts:webgather_facts:falsetasks:-na......
  • JavaScript插件 图片裁剪photoClip
    阅读目录​​JavaScript插件图片裁剪photoClip​​​​1、截图​​​​2、代码​​​​后台接收并处理图片代码​​JavaScript插件图片裁剪photoClip页面裁剪图片得到bas......
  • Linux基础课:第七章笔记--管道,环境变量与常用变量
    开始第七章的学习。技术都是手段,目标是最短的时间内,将学到的知识转化成想要的东西。y总金句:如果想在35岁之前出人头地,能正常工作的不过十来年,那么现在就应该好好学习,工作......
  • Linux常用命令
    cd命令进入到某个目录:cd 目录路径示例:#进入到子目录中cdtest#跳转到某个目录中cd/usr/apps/data/#回到上层目录中cd..#回到上上层目录中......
  • Linux安装jdk步骤
    1.下载适用的jdk版本,本人为arm版本链接: https://pan.baidu.com/s/1-xH33q_coZ4dkSre4nRwQQ 提取码: susa2.使用FileZilla工具将jdk-8u361-linux-aarch64.tar.gz上传......
  • Linux route命令修改默认路由优先级
    (自测可用)摘自:https://www.cnblogs.com/luoyang712/p/11953256.html在多个网络连接的情况下,比如以太网和WIFI同时存在的时候,路由表中就会存在多个默认网关。我们在......
  • linux 内核升级4.19
    cat>/etc/yum.repos.d/linnux-kernel.repo<<EOF[kernel-longterm-4.19]name=kernel-longterm-4.19baseurl=https://copr-be.cloud.fedoraproject.org/results/kwizar......
  • v-code-diff,一个 vue2/3 可用、更多特性支持的代码对比插件
    v-code-diff,一个vue2/3可用、更多特性支持的代码对比插件代码对比是前端一个常见的需求。在vue2上我们有 vue-code-diff 可以使用。美中不足的是其只能支持vue......
  • Vue.js 3 开源组件推荐:代码差异查看器插件
    一个Vue.js差异查看器插件,可以用来比较两个代码片断之间的差异。Github地址:https://github.com/hoiheart/vue-diff支持语言:cssxml:xml,html,xhtml,rss,atom,xjb,......
  • Linux系统安装
    1.1下载虚拟机软件虚拟机软件有:1、VirtualBox,一款免费开源的虚拟机软件;2、VMwareWorkstation;3、Java虚拟机(JVM 下载:VMware-workstation-full-12.5.6-55283491.2VMwa......