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 ...
随机推荐
- maven编译package慢
mvn package编译出现连接不上mvn库的问题: [root@localhost nnnnn]# mvn package[INFO] Scanning for projects...Downlo ...
- ringMVC——redirect重定向跳转传值
spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 首先先来介绍一下不带参数的重定向: ...
- 【SQLSERVER学习笔记】分页存储过程+调用
USE [数据库名] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[存储过程名] @pageI ...
- python爬取斗鱼B总直播弹幕
在某群中看到关于弹幕爬取的需求,又因为斗鱼比较OP,就以这个作为切入点. 如果你想了解如何获取弹幕,我的这个例子就可以让你豁然开朗,对于哪些没有开发弹幕的直播或视频平台,就需要用抓包工具获取请求,然后 ...
- 来看看Uber的司机支持服务签到及预约系统的架构设计思路
Uber的Greenlight Hubs(GLH)在全球拥有超过700个分支机构,为合作车主提供从账户和支付到车辆检查和车主注册等各方面的人工支持.为了给合作车主创造更好的体验并提高客户满意度,Ube ...
- MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询
支持的 JDBC 类型为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 JDBC 类型. BITFLOATCHARTIMESTAMPOTHERUNDEFINEDTINY ...
- Const 关键字详解
const 标识符 在c++中作为常量修饰符 用来修饰 函数 变量 指针 const 修饰的变量不可以改变值 const 在修饰指针的时候 const 标识符出现在*的左边表示 指向的变量为常量不能 ...
- chromium之message_pump_win之一
写了22篇博文,终于到这里了———— MessagePumpWin!!! MessagePumpWin这个类还是挺复杂的,可以分成好几部分.接下来分块分析 从介绍看,MessagePumpWin 是M ...
- C# Oracle批量插入数据进度条制作
前言 由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中.考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法.在插入操作运行时,会造成系统短暂 ...
- jquery 插件学习
练习jquery上的一个插件编写 1.标准的3个基本内容,根目录里面创建2个文件夹(存放css和js)和1个html页面文件: 2.测试的主html页面代码 <!DOCTYPE html> ...