使用工具

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. java中StringBuffer与String、StringBuilder的区别

    在java中我们经常可以看到StringBuffer和String的用法,但是我自己在使用过程中,经常会将两者弄混淆,今天我们就来了解一下两者的区别: 我们首先来看一下我们的官方API中的简单介绍: ...

  2. SignalR 教程二 服务端广播

    转帖官方教程:Tutorial: Server Broadcast with SignalR 2 http://www.asp.net/signalr/overview/getting-started ...

  3. css清除间隙

    .clear{clear:both;height:0;width:0;line-height:0;overflow:hidden;}

  4. JQuery手写一个简单的轮播图

    做出来的样式: 没有切图,就随便找了一些图片来实现效果,那几个小星星萌不萌. 这个轮播图最主要的部分是animate(),可以先熟悉下这个方法. 代码我放到了github上,链接:https://gi ...

  5. 画布与SVG区别

  6. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  7. Mybartis逆向工程

    Mybartis逆向工程 0.创建工程项目,切记莫用中文,亲测在运行时报错 1.Pom文件,使用mybatis-generator插件 <?xml version="1.0" ...

  8. mariadb或者mysql忘记root密码

    windows======================net stop mysql #先停止mysql或者在服务管理里面停止 直接打开Windows的命令行(CMD)窗口(以管理员身份运行),输入 ...

  9. MySQL---视图、触发器

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...

  10. A64 I2S调试

    通过A64 的I2S总线与回音消除模块连接,在A64中需要使能并配置daudio功能. Daudio 为A64 的数字音频接口,可配置成i2s/pcm格式标准音频接口. 内核配置在lichee/lin ...