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 為圖片壓縮工具


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM