import org.openqa.selenium.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
public class Screenshot {
/**
* @param driver chromedriver
* @param targetFolderPath 目标文件夹
* @return imagePath
*/
public String WebScreenshot(WebDriver driver, String targetFolderPath) {
// 将 WebDriver 强制转换为 TakesScreenshot 接口
TakesScreenshot ts = (TakesScreenshot) driver;
// 调用 getScreenshotAs() 方法进行截图
File screenshotFile = ts.getScreenshotAs(OutputType.FILE);
//目标问价夹是否存在
File targetFolder = new File(targetFolderPath);
if (!targetFolder.exists()) {
//目标文件夹不存在,则新建
targetFolder.mkdirs();
}
//截图命名
String targetImagePath = targetFolderPath +File.separator+ System.currentTimeMillis() + ".png";
File targetImage = new File(targetImagePath);
try (FileInputStream fis = new FileInputStream(screenshotFile);
FileOutputStream fos = new FileOutputStream(targetImage);
FileChannel sourceChannel = fis.getChannel();
FileChannel targetChannel = fos.getChannel()) {
long size = sourceChannel.size();
long transferred = 0;
while (transferred < size) {
transferred += sourceChannel.transferTo(transferred, size - transferred, targetChannel);
}
return targetImagePath;
} catch (Exception e) {
e.printStackTrace();
return "图片保存失败";
}
}
/**
* 截图元素并识别返回打码数据
* @param driver
* @param element
* @return code
*/
public String WebElementScreenshot(WebDriver driver, WebElement element) {
try {
// Get entire page screenshot
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
BufferedImage fullImg = ImageIO.read(screenshot);
// Get the location of element on the page
Point point = element.getLocation();
// Get width and height of the element
int eleWidth = element.getSize().getWidth();
int eleHeight = element.getSize().getHeight();
// Crop the entire page screenshot to get only element screenshot
BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(),
eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
//fileImageToBase64 转码
String base64Str = ImageToBase64.fileImageToBase64(screenshot);
//识别验证码并返回code
return new YdmVerify().commonVerify(base64Str);
} catch (Exception e) {
e.printStackTrace();
return "元素截取失败";
}
}
}