>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22651 个阅读者 刷新本主题
 * 贴子主题:  Java版Selenium 截取网页上特定元素的图片的方法 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-01-09 12:02:11     消息  查看  搜索  好友  邮件  复制  引用

需要引入的包
import java.io.*;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.*;
import java.util.*;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Iterator;
import java.nio.file.*;
import java.nio.file.attribute.*;
import javax.imageio.ImageIO;

具体的方法

/**
     * This method for screen shot element
     *
     * @param driver
     * @param element
     * @param path
     * @throws InterruptedException
     */

    public static void screenShotForElement(WebDriver driver,
            WebElement element, String path) throws InterruptedException {
        //先截取整个网页的图片,存放在scrFile文件中
        File scrFile = ((TakesScreenshot) driver)
                .getScreenshotAs(OutputType.FILE);
        try {
            //获得特定元素在整个网页图片中所在的位置和区域大小
            Point p = element.getLocation();
            int width = element.getSize().getWidth();
            int height = element.getSize().getHeight();
            Rectangle rect = new Rectangle(width, height);
            BufferedImage img = ImageIO.read(scrFile);
            BufferedImage dest = img.getSubimage(p.getX(), p.getY(),
                    rect.width, rect.height);
            //截取特定元素所在区域的图片,把图片保存到scrFile文件中
            ImageIO.write(dest, "png", scrFile);
            Thread.sleep(1000);
            //利用Apache Common包中的FileUtils类进行文件拷贝
            FileUtils.copyFile(scrFile, new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

此方法的不足之处是,对整个网页的截屏取决于显示器屏幕的大小,对于超出屏幕的网页区域不能截屏。如果尝试对不在屏幕显示范围内的特定元素进行截取子图片,会抛出outside of Raster异常。

关于抓取网页图片的其他实用方法,请参考 盘点用Java抓取HTTP服务器和FTP服务器的网页数据或图片等数据的实用技巧
————————————————
原文链接:https://blog.csdn.net/unhappycode/article/details/50316073


程序猿的技术大观园:www.javathinker.net

[这个贴子最后由 flybird 在 2020-01-10 16:16:32 重新编辑]
  Java面向对象编程-->内部类
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->XML数据处理
  精通Spring-->Vue Router路由管理器
  Vue3开发-->Vue CLI脚手架工具
  解决javac编译错误: 编码UTF8/GBK的不可映射字符
  Java内存设置详解(含内存溢出问题的解决)
  从实战角度解读JVM:类加载机制+JVM调优实战+代码优化!
  ThreadLocal的内存泄露的原因分析以及如何避免
  64匹马,8个赛道,找出跑得最快的4匹马
  java万年历简单制作
  邀请您一起来祝福和祈祷,祈愿疫情早日消除,平安吉祥
  正则表达式范例
  Java设计模式:解释器模式
  Java设计模式:装饰器模式
  Java入门实用代码:打印平行四边形
  判断一个字符是否是汉字
  初学者该学哪种编程语言
  native2ascii.exe 的Java实现类
  java零基础入门-面向对象篇 抽象类
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。