博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现网页截图
阅读量:6887 次
发布时间:2019-06-27

本文共 6591 字,大约阅读时间需要 21 分钟。

使用工具

java+selenium+phantomjs /chromedriver /firefox

1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件

2. selenium工具 是对页面进行点击操作后在截图 需要用到的工具。

插件的使用方法几乎一致

上代码:1.使用phantomjs截图

1     public static String getPicByPhantomjs(Map
map,String pic,File sf){ 2 logger.warn("使用phantomjs截图链接:"+map.get("url")); 3 //定义图片存储路径 4 DesiredCapabilities dcaps = null; 5 PhantomJSDriver driver = null; 6 String picName = null; 7 try { 8 //设置必要参数 9 dcaps = new DesiredCapabilities();10 //ssl证书支持11 dcaps.setCapability("acceptSslCerts", true);12 //截屏支持13 dcaps.setCapability("takesScreenshot", true);14 //css搜索支持15 dcaps.setCapability("cssSelectorsEnabled", true);16 //js支持17 dcaps.setJavascriptEnabled(true);18 //驱动支持(第二参数表明的是你的phantomjs引擎所在的路径)19 dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,20 "D:/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs.exe");21 // "F:/test/phantomjs-2.1.1-windows/bin/phantomjs.exe");22 //创建无界面浏览器对象23 driver = new PhantomJSDriver(dcaps);24 long start = System.currentTimeMillis();25 // driver.get(url); 26 driver.get(map.get("url")); 27 //设置隐性等待(作用于全局)28 driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);29 Thread.sleep(5* 1000);30 if(!"".equals(map.get("str")) && map.get("str")!=null){31 if(ElementExist(driver,By.className(map.get("str")))){32 WebElement inputBox = driver.findElement(By.className(map.get("str")));33 Actions action = new Actions(driver);34 action.click(inputBox).build().perform();35 //元素点击 后等待加载36 Thread.sleep(2 * 1000);37 }38 }39 40 JavascriptExecutor js = driver;41 //页面下滑10次,每次下滑加载2s42 for (int i = 0; i < 10; i++) {43 js.executeScript("window.scrollBy(0,1000)");44 //睡眠2s等js加载完成45 Thread.sleep(2 * 1000);46 }47 //指定了OutputType.FILE做为参数传递给getScreenshotAs()方法,其含义是将截取的屏幕以文件形式返回。48 File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);49 Thread.sleep(2000);50 //利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件对象51 FileUtils.copyFile(srcFile, new File(sf.getPath()+File.separator+pic));52 Thread.sleep(2000);53 Thumbnails.of(sf.getPath()+File.separator+pic).scale(1.0f).toFile(sf.getPath()+File.separator+pic);54 driver.close();55 driver.quit();56 picName = pic;57 System.out.println("本次截图耗时:" + (System.currentTimeMillis() - start) + " 毫秒");58 // System.out.println("转换后的链接:"+map.get("url"));59 } catch (Exception e) {60 driver.close();61 driver.quit();62 picName = "";63 logger.warn("使用phantomjs截图时:"+e.toString());64 }65 return picName;66 }
使用 phantomjs截图

2.使用 chromedriver截图

1     public static String getPicByChrom(Map
map,String pic,File sf){ 2 3 logger.warn("使用chromedriver截图链接:"+map.get("url")); 4 //定义图片存储路径 5 WebDriver driver = null ; 6 String picName = null; 7 try { 8 long start = System.currentTimeMillis(); 9 String chromeDriverDir = "D:/chromedriver/chromedriver_win32/chromedriver.exe";10 System.setProperty("webdriver.chrome.driver", chromeDriverDir);11 driver = new ChromeDriver();12 driver.manage().window().maximize();13 driver.get(map.get("url")); 14 //设置隐性等待(作用于全局)15 driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);16 Thread.sleep(5* 1000);17 if(!"".equals(map.get("str")) && map.get("str")!=null){18 if(ElementExist(driver,By.className(map.get("str")))){19 WebElement inputBox = driver.findElement(By.className(map.get("str")));20 Actions action = new Actions(driver);21 action.click(inputBox).build().perform();22 //元素点击 后等待加载23 Thread.sleep(2 * 1000);24 }25 }26 27 // JavascriptExecutor js = (JavascriptExecutor) driver;28 //页面下滑10次,每次下滑加载2s29 // for (int i = 0; i < 1; i++) {30 // js.executeScript("window.scrollBy(0,1000)");31 // //睡眠2s等js加载完成32 // Thread.sleep(2 * 1000);33 // }34 //指定了OutputType.FILE做为参数传递给getScreenshotAs()方法,其含义是将截取的屏幕以文件形式返回。35 File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);36 Thread.sleep(2000);37 //利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件对象38 FileUtils.copyFile(srcFile, new File(sf.getPath()+File.separator+pic));39 Thread.sleep(2000);40 Thumbnails.of(sf.getPath()+File.separator+pic).scale(1.0f).toFile(sf.getPath()+File.separator+pic);41 driver.close();42 driver.quit();43 picName = pic;44 System.out.println("本次截图耗时:" + (System.currentTimeMillis() - start) + " 毫秒");45 // System.out.println("转换后的链接:"+map.get("url"));46 } catch (Exception e) {47 driver.close();48 driver.quit();49 picName = "";50 logger.warn("使用chromedriver截图时:"+e.toString());51 }52 return picName;53 }
chromedriver截图使用

注 :

1.phantomjs截图会创建无界面浏览器进行截图,可截取网页长图 (推荐使用)

2.chromedriver 截图工具只能截取当前浏览器可见区域长度(调用浏览器打开url地址,插件版本需要与chrom浏览器版本一致)

3.Thumbnails 为图片压缩工具

转载于:https://www.cnblogs.com/atimo/p/10566248.html

你可能感兴趣的文章
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
剑指offer---12-**--数值的整数次方
查看>>
PAT - L2-010. 排座位(并查集)
查看>>
Python 学习笔记 - 线程(线程锁,信标,事件和条件)
查看>>
大数据技术服务商个推获4亿人民币D轮融资
查看>>
Git的详细使用教程
查看>>
iOS实现类似苹果手机原生的锁屏界面(数字密码)
查看>>
[vue] 表单输入格式化,中文输入法异常
查看>>
Observer观察者模式与OCP开放-封闭原则
查看>>
如何搭建高级工程师知识框架?推荐两种方式
查看>>
BAT的医疗春秋大梦
查看>>
Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
查看>>
利用H5的css3制作动画
查看>>
Android View 事件分发源码分析
查看>>
vue 2.0 - props
查看>>
RustCon Asia 实录 | Rust 在国内某视频网站的应用
查看>>