最近做项目,需要用到截图的功能,就是给一个url地址,然后自动打开,截取出一个封面图片,保存到服务器上。前端有js可以支持截图,像phantomjs等js插件都可以实现,但是效果不是很好,有些页面渲染不出来。
phantom.js使用方法https://www.jianshu.com/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 = "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的网页,下面是截出来的效果图:
此方法截出来的图还算清晰,唯一的缺点就是调用方法的时候会打开一个浏览器窗口。如果有朋友还有其他更好的截图方法,欢迎交流。