• java实现网页截图


    使用工具

    java+selenium+phantomjs /chromedriver /firefox

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

    插件的使用方法几乎一致

    上代码:1.使用phantomjs截图

     1     public static String getPicByPhantomjs(Map<String ,String> 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次,每次下滑加载2s
    42                  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<String ,String> 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次,每次下滑加载2s
    29 //                 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 为图片压缩工具

  • 相关阅读:
    20181030-4 每周例行报告
    20181023-3 每周例行报告
    20181016-10 每周例行报告
    PSP总结报告
    第十二周例行报告
    对团队成员公开感谢
    第十一周例行报告
    第十周例行报告
    第九周例行报告
    第八周例行报告
  • 原文地址:https://www.cnblogs.com/atimo/p/10566248.html
Copyright © 2020-2023  润新知