java实现网页截图
使用工具
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实现网页截图的更多相关文章
- 如何以Java实现网页截图技术
转自 http://blog.csdn.net/cping1982/article/details/5353049 今天看到某网友关于“如何以Java实现网页截图技术”的咨询帖,由于出现该咨询的地 ...
- 使用PhantomJS实现网页截图服务
这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...
- 网页截图工具CutyCapt
网页截图工具CutyCapt CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型, ...
- Python中使用 Selenium 实现网页截图实例
Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试.不过,也可以用来给网页截图.目前,它支持 Java.C#.Ruby 以及 Python 四种客户端语言.如果你使用 ...
- html2canvas 网页截图 下载 上传
利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...
- 用java编网页的学习流程,我的一些小心得(初学java到高深运用)
(1)java基础:首先得会写int,String,for循环,数组,**等等(熟练各种基础的关键字,各种java自带的排序,随即等等算法)什么是封装,继承,多态,然后private,public,p ...
- iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图
iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="sh ...
- chrome也可以整张网页截图,保存完整网页为图片
转自:http://www.webkaka.com/blog/archives/chrome-save-a-webpage.html 关于浏览器截图,一直以为Chrome无能为力,最近发现,原来Chr ...
- java读取网页图片路径并下载到本地
java读取网页图片路径并下载到本地 最近公司需要爬取一些网页上的数据,自己就简单的写了一个demo,其中有一些数据是图片,需要下载下来到本地并且 将图片的路径保存到数据库,示例代码如下: packa ...
随机推荐
- NSMutableArray和NSArray的常用方法及相互转换
NSMutableArray和NSArray的常用方法及相互转换 // NSArray --> NSMutableArray NSMutableArray *myMutableArray = [ ...
- git-git remote
使用git的时候难免会用到remote tracking,下面简要记录一下在使用git remote时的一些技巧 (1)add $git remote add origin https://githu ...
- JQuery手写一个简单的轮播图
做出来的样式: 没有切图,就随便找了一些图片来实现效果,那几个小星星萌不萌. 这个轮播图最主要的部分是animate(),可以先熟悉下这个方法. 代码我放到了github上,链接:https://gi ...
- C#中小写人民币转大写
/// <summary> /// 转换成大写人民币 /// </summary> /// <param name="myMoney">< ...
- python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
首发于:python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=431 本文 ...
- webuploader实现上传视频
之前有人让我做一个webuploader上传视频,但是一直没有时间,现在抽出了时间来.来完成以下这个简单的demo 第一步,上传视频和上传 图片有什么区别么? 其实是没有的,因为执行的操作都是上传,所 ...
- C++笔记006:关于类的补充
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 关于类的补充: 类是一个数据类型(固定大小内存块的别名),定义一个类,是一个抽象的概念,不会给你分配内存,用数据类型定义变量的时候,才会分 ...
- chromium之ref_counted
namespace subtle { class RefCountedBase { protected: RefCountedBase(); ~RefCountedBase(); void AddRe ...
- Linux面试笔试题带答案【详解】
一.填空题:1. 在Linux系统中,以 ,该文件属性是 目录.8. 前台起动的进程使用 Ctrl+c 终止.9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置.10. 网络管 ...
- Java 8 – Map排序
前提 Map是Java中最常用的集合类之一,这里整理了关于HashMap的排序 (关于List的排序,请查看Collections.sort()的doc或源码). 将无序的HashMap借助Strea ...