利用java调用谷歌浏览器驱动进行网页截图

最近做项目,需要用到截图的功能,就是给一个url地址,然后自动打开,截取出一个封面图片,保存到服务器上。前端有js可以支持截图,像phantomjs等js插件都可以实现,但是效果不是很好,有些页面渲染不出来。

phantom.js使用方法https://www.jianshu.com/p/074d7ab370e3

 

本次就介绍java使用chromedriver.exe谷歌浏览器驱动进行网页截图。

 

创建一个maven项目,在pom文件中加入以下依赖:

        
        
            org.seleniumhq.selenium
            selenium-java
            3.9.1
        
        
        
            commons-io
            commons-io
            2.4
        

在resources目录下新建一个driver目录:

然后在http://npm.taobao.org/mirrors/chromedriver/下载与电脑谷歌浏览器对应版本的驱动,解压放到此driver目录下

编写main方法

 public static void main(String[] args)throws Exception  {
        String url = "http://echarts.baidu.com/examples/";
        Integer sleepTime = 5*1000;// 截图等待时间
        String targetPath = "D:/test.jpg";// 生成图片文件路径
        // 设置是否启用headless模式
        System. setProperty("java.awt.headless", "true");
        // 加载谷歌浏览器驱动
        URL resource = Test.class.getClassLoader().getResource("");
        String driverPath = java.net.URLDecoder.decode(resource.getPath(), "UTF-8") + "driver/chromedriver.exe";
        ChromeOptions option=new ChromeOptions();
        option.addArguments("disable-infobars");
        System.setProperty("webdriver.chrome.driver", driverPath);
        WebDriver driver = new ChromeDriver(option);
        driver.manage().window().maximize();
        driver.get(url);
        Thread.sleep(sleepTime);
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        // 全屏
        FileUtils.copyFile(srcFile, new File(targetPath));
        System.out.println("===>截图完成...正在同步数据" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//        robot.delay(3000);
        driver.quit();
    }

运行即可在D盘下生成一张jpg图片文件,我这里截的是echarts的网页,下面是截出来的效果图:

利用java调用谷歌浏览器驱动进行网页截图_第1张图片

 

此方法截出来的图还算清晰,唯一的缺点就是调用方法的时候会打开一个浏览器窗口。如果有朋友还有其他更好的截图方法,欢迎交流。

你可能感兴趣的:(利用java调用谷歌浏览器驱动进行网页截图)