使用java + seleniumhq + chrome(headless)截图
- 下载chrome浏览器(我本地的是chrome74),所以下载chrome版本的驱动程序为74.0.3729.6,
可以根据自己的浏览器版本下载对应(或相近)的驱动,chrome驱动程序的下载地址: 淘宝镜像 和 google - 创建一个maven项目,在pom文件中加入以下依赖:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class TakePageshot {
public static void main(String[] args) throws IOException {
System.setProperty("webdriver.chrome.driver", "c://chromedriver.exe");
System. setProperty("java.awt.headless", "true");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.setHeadless(true);
ChromeDriver broswer = new ChromeDriver(options);
int winHeight = 800 ;
int winWidth = 1280 ;
Dimension dim = new Dimension(winWidth, winHeight);
broswer.manage().window().setSize(dim);
broswer.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
broswer.get("http://www.qq.com");
Object[] nil = new Object[] {};
Long pageHeight = (Long)broswer.executeScript("return document.body.scrollHeight", nil);
if(pageHeight <= winHeight) {
File srcFile = ((TakesScreenshot)broswer).getScreenshotAs(OutputType.FILE);
File f = new File("c:/" +srcFile.getName());
FileUtils.copyFile(srcFile, f);
}else {
int pages = (pageHeight.intValue() / winHeight) + (pageHeight.intValue() % winHeight == 0 ? 0 : 1);
broswer.executeScript("document.body.style.overflow = \"hidden\"", nil);
long scrollHeight = 0;
int imageTotalHeight = 0 ;
List<BufferedImage> images = new ArrayList<BufferedImage>();
for(int i = 0 ; i < pages ; i ++) {
broswer.executeScript("window.scrollTo(0 , "+ scrollHeight +")", nil);
File screenshotFile = ((TakesScreenshot)broswer).getScreenshotAs(OutputType.FILE);
BufferedImage screenshot = ImageIO.read(screenshotFile);
images.add(screenshot);
imageTotalHeight += screenshot.getHeight();
scrollHeight += winHeight;
}
BufferedImage pageshot = new BufferedImage(winWidth , imageTotalHeight , BufferedImage.TYPE_INT_RGB);
Graphics2D gd2 = pageshot.createGraphics();
int offsetHeight = 0 ;
for (int i = 0; i < images.size(); i++) {
BufferedImage image = images.get(i);
gd2.drawImage(image, 0, offsetHeight, image.getWidth(), image.getHeight(), null);
offsetHeight += image.getHeight();
}
OutputStream output = new FileOutputStream(new File("c:/" + UUID.randomUUID().toString() + ".png"));
ImageIO.write(pageshot, "png", output);
output.close();
gd2.dispose();
}
broswer.close();
broswer.quit();
}
}