滚动截取页面图片

简介: 滚动截取页面图片

截取页面图片, 普通的截图只能截取一部分,要是页面内容多的话,就需要滚动进行查看了。  

滚动查看的示例代码如下, 有些页面还可能要调整,大部分页面是可以用的。

  /**
     * 滚动截图
     * @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();
        }
    }
目录
相关文章
|
8月前
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
html中设置背景图片不重复不平铺只显示一张图片
html中设置背景图片不重复不平铺只显示一张图片
605 0
|
8月前
VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
|
前端开发 JavaScript 容器
JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动
JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动
79 0
|
8月前
|
索引
【sgPhotoPlayer】自定义组件:图片预览,支持点击放大、缩小、旋转图片
【sgPhotoPlayer】自定义组件:图片预览,支持点击放大、缩小、旋转图片
|
8月前
|
JavaScript 容器
富文本的图片添加点击放大功能
思路:富文本加载后,dom出全部img元素,然后各自单独添加点击事件
286 3
|
8月前
如何在屏幕的任意位置拖拽控制图片的移动?
如何在屏幕的任意位置拖拽控制图片的移动?
146 1
|
8月前
|
前端开发 JavaScript
在一张图片上添加鼠标移入和移出事件,并定位图片中的内容
在一张图片上添加鼠标移入和移出事件,并定位图片中的内容
128 1
图片和文件预览组件(部分源码),可拖动,缩小,放大。 #41
图片和文件预览组件(部分源码),可拖动,缩小,放大。 #41
153 0
|
JavaScript
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
285 0
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片