java如何使用 firefox 截图
前言
很多时候需要生成文档,但是word不能生成图形,可以截取浏览器生成好的图表。
首先服务器需要安装好firefox 浏览器,或者 chrome浏览器。
一、驱动
首先需要下载一个 浏览器驱动,geckodriver,可以在 github 中找一个。
https://github.com/mozilla/geckodriver/releases
二、java 代码
1. 驱动包 pom.xml
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.0</version>
</dependency>
2. WebDriver 进行截图
2.1.1 初始化驱动
private WebDriver getDriver() {
FirefoxOptions firefoxOptions = new FirefoxOptions();
FirefoxBinary firefoxBinary = new FirefoxBinary();
//设置浏览器后台启动,不打开浏览器
firefoxBinary.addCommandLineOptions("--headless");
firefoxOptions.setBinary(firefoxBinary);
// 设置浏览器的驱动路径
System.setProperty("webdriver.gecko.driver", "D:\\geckodriver.exe");
WebDriver webDriver = new FirefoxDriver(firefoxOptions);
//设置页面的大小
webDriver.manage().window().setSize(new Dimension(1820, 500));
webDriver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
//设置域名
webDriver.get(StringUtils.join("http://localhost"));
// 设置cookie
webDriver.manage().addCookie(
new Cookie("lang","zh-CN", "http://localhost", "/", DateUtil.add(new Date(), 1, Calendar.DATE)));
return webDriver;
2.1.2 截图
// 请求地址
driver.get("http://localhost:8080/test/1");
//截图操作
byte[] bytes = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
try {
BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
WebElement ele = driver.findElement(By.id("divId"));
Point point = ele.getLocation();
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
BufferedImage targetImage = image.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
driver.quit(); //截图 完退出 浏览器,关系浏览器
// targetIMage 就是截取好的图片流,可以写入word或者别的文档中了。
} catch (IOException e) {
logger.error("火狐截图失败 {}", e.getMessage());
throw new RuntimeException();
}
总结
小小的截图工具,工作中可以这个导出直观,简洁明了的 文档了,具体代码中还需要按照情况调试,在此记录大概流程。