最近做项目,需要用到截图的功能,就是给一个url地址,然后自动打开,截取出一个封面图片,保存到服务器上。前端有js可以支持截图,像phantomjs等js插件都可以实现,但是效果不是很好,有些页面渲染不出来。
phantom.js使用方法/p/074d7ab370e3
本次就介绍java使用chromedriver.exe谷歌浏览器驱动进行网页截图。
创建一个maven项目,在pom文件中加入以下依赖:
<!--网页自动化测试--><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.9.1</version></dependency><!--commons.io文件拷贝用--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
在resources目录下新建一个driver目录:
然后在ChromeDriver Mirror下载与电脑谷歌浏览器对应版本的驱动,解压放到此driver目录下
编写main方法
public static void main(String[] args)throws Exception {String url = "/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 = .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调用谷歌浏览器驱动进行网页截图》对你有帮助,请点赞、收藏,并留下你的观点哦!