截取页面图片, 普通的截图只能截取一部分,要是页面内容多的话,就需要滚动进行查看了。
滚动查看的示例代码如下, 有些页面还可能要调整,大部分页面是可以用的。
/** * 滚动截图 * @param driver 驱动 * @param out 文件输出流 * @param browserType 浏览器(IE,chrome,h5) */ public void scollScreenShot(WebDriver driver, OutputStream out, String browserType) { try { JavascriptExecutor jse = ((JavascriptExecutor) driver); String heightExp = CommonFunc.IsWebDriverH5(browserType) ? "return document.documentElement.scrollHeight;" : "return document.body.scrollHeight;"; jse.executeScript("window.scrollTo(0,document.body.scrollTop)"); // 整个页面的高度 Long dh = (Long) jse.executeScript(heightExp); if (0 == dh.intValue()) { File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); BufferedImage bi = ImageIO.read(file); ImageIO.write(bi, "PNG", out); return; } Dimension size = driver.manage().window().getSize(); // 屏幕高度 int wh = size.height - 160; // 屏幕宽度 int ww = size.width; // 文档高度 // 需要滚动次数 int page = (int) Math.ceil(Float.valueOf(dh) / wh); // 最终图 BufferedImage image = new BufferedImage(ww, dh.intValue(), TYPE_INT_RGB); Graphics g = image.createGraphics(); int browserY = 0; for (int i = 0; i < page; i++) { browserY += wh; int tmp = 0; if (browserY > dh) { tmp = browserY - dh.intValue(); browserY = dh.intValue(); } // 截图 File file = ((RemoteWebDriver) driver).getScreenshotAs(OutputType.FILE); BufferedImage bi = ImageIO.read(file); // 拼图/合图 g.drawImage(bi, 0, (browserY - wh) + tmp, bi.getWidth(), bi.getHeight(), null); jse.executeScript(String.format("window.scrollTo(%s, %s)", 0, browserY)); } // 释放此图形的上下文以及它使用的所有系统资源。 g.dispose(); // 将绘制的图像生成至输出流 ImageIO.write(image, "PNG", out); // byte[] imageByte = ((ByteArrayOutputStream) out).toByteArray(); // InputStream inputStream = new ByteArrayInputStream(imageByte); // // OutputStream outStream = new FileOutputStream("C:\\selenium\\captcha1.jpg"); // IOUtils.copy(inputStream, outStream); // inputStream.close(); // outStream.close(); } catch (Exception e) { e.printStackTrace(); } }