使用工具

java+selenium+phantomjs /chromedriver /firefox

1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件
2. selenium工具 是对页面进行点击操作后在截图 需要用到的工具。

插件的使用方法几乎一致

上代码:1.使用phantomjs截图

     public static String getPicByPhantomjs(Map<String ,String> map,String pic,File sf){
logger.warn("使用phantomjs截图链接:"+map.get("url"));
//定义图片存储路径
DesiredCapabilities dcaps = null;
PhantomJSDriver driver = null;
String picName = null;
try {
//设置必要参数
dcaps = new DesiredCapabilities();
//ssl证书支持
dcaps.setCapability("acceptSslCerts", true);
//截屏支持
dcaps.setCapability("takesScreenshot", true);
//css搜索支持
dcaps.setCapability("cssSelectorsEnabled", true);
//js支持
dcaps.setJavascriptEnabled(true);
//驱动支持(第二参数表明的是你的phantomjs引擎所在的路径)
dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
"D:/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs.exe");
// "F:/test/phantomjs-2.1.1-windows/bin/phantomjs.exe");
//创建无界面浏览器对象
driver = new PhantomJSDriver(dcaps);
long start = System.currentTimeMillis();
// driver.get(url);
driver.get(map.get("url"));
//设置隐性等待(作用于全局)
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
Thread.sleep(5* 1000);
if(!"".equals(map.get("str")) && map.get("str")!=null){
if(ElementExist(driver,By.className(map.get("str")))){
WebElement inputBox = driver.findElement(By.className(map.get("str")));
Actions action = new Actions(driver);
action.click(inputBox).build().perform();
//元素点击 后等待加载
Thread.sleep(2 * 1000);
}
} JavascriptExecutor js = driver;
//页面下滑10次,每次下滑加载2s
for (int i = 0; i < 10; i++) {
js.executeScript("window.scrollBy(0,1000)");
//睡眠2s等js加载完成
Thread.sleep(2 * 1000);
}
//指定了OutputType.FILE做为参数传递给getScreenshotAs()方法,其含义是将截取的屏幕以文件形式返回。
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Thread.sleep(2000);
//利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件对象
FileUtils.copyFile(srcFile, new File(sf.getPath()+File.separator+pic));
Thread.sleep(2000);
Thumbnails.of(sf.getPath()+File.separator+pic).scale(1.0f).toFile(sf.getPath()+File.separator+pic);
driver.close();
driver.quit();
picName = pic;
System.out.println("本次截图耗时:" + (System.currentTimeMillis() - start) + " 毫秒");
// System.out.println("转换后的链接:"+map.get("url"));
} catch (Exception e) {
driver.close();
driver.quit();
picName = "";
logger.warn("使用phantomjs截图时:"+e.toString());
}
return picName;
}

使用 phantomjs截图

2.使用 chromedriver截图

     public static String getPicByChrom(Map<String ,String> map,String pic,File sf){

                 logger.warn("使用chromedriver截图链接:"+map.get("url"));
//定义图片存储路径
WebDriver driver = null ;
String picName = null;
try {
long start = System.currentTimeMillis();
String chromeDriverDir = "D:/chromedriver/chromedriver_win32/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromeDriverDir);
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(map.get("url"));
//设置隐性等待(作用于全局)
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
Thread.sleep(5* 1000);
if(!"".equals(map.get("str")) && map.get("str")!=null){
if(ElementExist(driver,By.className(map.get("str")))){
WebElement inputBox = driver.findElement(By.className(map.get("str")));
Actions action = new Actions(driver);
action.click(inputBox).build().perform();
//元素点击 后等待加载
Thread.sleep(2 * 1000);
}
} // JavascriptExecutor js = (JavascriptExecutor) driver;
//页面下滑10次,每次下滑加载2s
// for (int i = 0; i < 1; i++) {
// js.executeScript("window.scrollBy(0,1000)");
// //睡眠2s等js加载完成
// Thread.sleep(2 * 1000);
// }
//指定了OutputType.FILE做为参数传递给getScreenshotAs()方法,其含义是将截取的屏幕以文件形式返回。
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Thread.sleep(2000);
//利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件对象
FileUtils.copyFile(srcFile, new File(sf.getPath()+File.separator+pic));
Thread.sleep(2000);
Thumbnails.of(sf.getPath()+File.separator+pic).scale(1.0f).toFile(sf.getPath()+File.separator+pic);
driver.close();
driver.quit();
picName = pic;
System.out.println("本次截图耗时:" + (System.currentTimeMillis() - start) + " 毫秒");
// System.out.println("转换后的链接:"+map.get("url"));
} catch (Exception e) {
driver.close();
driver.quit();
picName = "";
logger.warn("使用chromedriver截图时:"+e.toString());
}
return picName;
}

chromedriver截图使用

注 :

1.phantomjs截图会创建无界面浏览器进行截图,可截取网页长图 (推荐使用)
2.chromedriver 截图工具只能截取当前浏览器可见区域长度(调用浏览器打开url地址,插件版本需要与chrom浏览器版本一致)

3.Thumbnails 为图片压缩工具

java实现网页截图的更多相关文章

  1. 如何以Java实现网页截图技术

    转自   http://blog.csdn.net/cping1982/article/details/5353049 今天看到某网友关于“如何以Java实现网页截图技术”的咨询帖,由于出现该咨询的地 ...

  2. 使用PhantomJS实现网页截图服务

    这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...

  3. 网页截图工具CutyCapt

    网页截图工具CutyCapt   CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型, ...

  4. Python中使用 Selenium 实现网页截图实例

    Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试.不过,也可以用来给网页截图.目前,它支持 Java.C#.Ruby 以及 Python 四种客户端语言.如果你使用 ...

  5. html2canvas 网页截图 下载 上传

    利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...

  6. 用java编网页的学习流程,我的一些小心得(初学java到高深运用)

    (1)java基础:首先得会写int,String,for循环,数组,**等等(熟练各种基础的关键字,各种java自带的排序,随即等等算法)什么是封装,继承,多态,然后private,public,p ...

  7. iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图

    iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="sh ...

  8. chrome也可以整张网页截图,保存完整网页为图片

    转自:http://www.webkaka.com/blog/archives/chrome-save-a-webpage.html 关于浏览器截图,一直以为Chrome无能为力,最近发现,原来Chr ...

  9. java读取网页图片路径并下载到本地

    java读取网页图片路径并下载到本地 最近公司需要爬取一些网页上的数据,自己就简单的写了一个demo,其中有一些数据是图片,需要下载下来到本地并且 将图片的路径保存到数据库,示例代码如下: packa ...

随机推荐

  1. 【VS插件】Highlight all occurrences of selected word

    这个插件可以让相同的单词全部高亮成绿色,在VS中看一些文本(比如SQL)类型的文件时非常好用. 类似于这种效果:

  2. type和 #define

    1.#define INT8U unsigned char   :  用INT8U代替unsigned char 2.typedef typedef int size; 此声明定义了一个int的同义字 ...

  3. LeetCode27.移除元素 JavaScript

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  4. Swift:一个基于.NET Core的分布式批处理框架

    Swift是什么 从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合. Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发到多台服务器并 ...

  5. DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果

    DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...

  6. [ZJOI2009]假期的宿舍(二分图匹配)

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  7. 竞赛题解 - NOIP2018 赛道修建

    \(\mathcal {NOIP2018}\) 赛道修建 - 竞赛题解 额--考试的时候大概猜到正解,但是时间不够了,不敢写,就写了骗分QwQ 现在把坑填好了~ 题目 (Copy from 洛谷) 题 ...

  8. 笔记: 对称加密算法的PKCS5 和 PKCS7 填充

    PKCS #7 填充字符串由一个字节序列组成,每个字节填充该填充字节序列的长度. 假设,块的长度是 8, 数据长度是 5 数据:AA AA AA AA AA PKCS#7 填充 AA AA AA AA ...

  9. 关于NPOI导出excel文件(xls和xlsx两种格式)提示格式不符的问题

    这两天在做导出excel文件的时候遇到这个问题 本来我导出的格式是xlsx格式的,但是下载得到的文件格式变成了xls, 一开始以为是返回的contenttype设置错了 return File(ms, ...

  10. 分清clientY pageY screenY layerY offsetY的区别

    分清clientY pageY screenY layerY offsetY的区别 在我们想要做出拖拽这个效果的时候,我们需要分清这几个属性的区别,这几个属性都是计算鼠标点击的偏移值,我们需要对其进行 ...