【Selenium-WebDriver實戰篇】基於java的selenium之驗證碼識別內容


==========================================================================================================

     寫在前面:

     還是遇到了傳說中的登錄驗證識別碼數字圖片,從網上找了一些例子,然后覺得比較好的連接地址記錄下來,然后修改相關的內容成為能用的。

     內容還是蠻實用的,方便以后查閱。

==========================================================================================================

參考鏈接:http://www.51testing.com/html/53/462853-3718359.html

遇到無法下載tesseract,然后網上查可以通過該目錄進行下載安裝。

https://blog.csdn.net/showgea/article/details/82656515

遇到的第三個問題是:對有噪點的圖片使用tesseract工具時,識別結果很差,但是對黑白照片視頻很好,所以想到了把圖片黑白化后再識別。

https://blog.csdn.net/zhulier1124/article/details/80606647

Tess4J識別OCR相關:

https://blog.csdn.net/zai_xia/article/details/80003778

 https://sourceforge.net/p/tess4j/bugs/15/

識別驗證碼切割后的算法:https://www.cnblogs.com/zeze/p/5816742.html

https://www.cnblogs.com/nayitian/p/3282862.html

https://blog.csdn.net/qq_34351177/article/details/84992133

在識別的道路上總是遇到各種各樣的問題,現在可以裁剪圖片了,但是裁剪后的原圖是傾斜的,所以識別率也很低,於是找到旋轉圖片的方法。

https://blog.csdn.net/x541211190/article/details/80784713

package com.util;
 
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/*准備工具:
 * 1.下載安裝tesseract:http://sourceforge.net/projects/tesseract-ocr/
 * 2.將tesseract.exe命令保存為bat文件,bat內容為
 * @echo off
tesseract.exe yzm.png 1 -l
exit
 *獲取驗證碼步驟:
 *1、保存動態頁面中的圖片文件到本地;
download(URL地址, "code.png");
  2、java運行tesseract批量處理bat文件​,產生TXT文件保存到本地;
 String batPath = "cmd /c start G:\\uxin1\\selenium_xin\\code.bat";
 runTesseractBat(String batPath)
  3、讀取TXT文件​;
String filepath="G:/uxin1/selenium_xin/code.txt";
readTextFile(filePath)
 */
public class analysisIdentifyingCode {
/*
 * 根據url下載驗證碼圖片並保存到指定的地址
 * @strUrl 圖片下載地址
 * @strPath 保存路徑
 */
public void download(String strUrl,String strPath) {
 
  FileOutputStream utStream = null;        
  try {
 //打開鏈接
 URL url = new URL(strUrl);                               
 
 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 conn.setConnectTimeout(5 * 1000);
 //通過輸入流獲取圖片數據 
 InputStream inStream = conn.getInputStream();                               
 //得到圖片的二進制數據,以二進制封裝得到數據,具有通用性
 byte[] data =readInputStream(inStream);                               
 //new一個文件對象用來保存圖片,默認保存當前工程根目錄
 File imageFile = new File(strPath);                               
 //創建輸出流  
 outStream = new FileOutputStream(imageFile);
 //寫入數據                 
 outStream.write(data);                
 //關閉輸出流                 
 outStream.close();           
 
} catch (Exception e) {
               e.printStackTrace();
 
           } finally {
 
               try {  
 
                 if (outStream != null) { 
                
                     outStream.close();
 
                    }  
 
             } catch (IOException e) { 
 
                 e.printStackTrace(); 
 
             } 
 
   }
 
}
 
/*
 * java運行tesseract批量處理bat文件​,產生TXT文件保存到本地
 * @batPath batPath 存放的二進制圖片路徑
 * 
 */
public void runTesseractBat(String batPath) throws InterruptedException{
String cmd = batPath;
Thread.sleep(2000);
try {
Runtime.getRuntime().exec(cmd);    }
 
catch (IOException e) {
 
// TODO Auto-generated catch block
Log.error("運行tesseract批量處理bat文件異常", e);
   } 
 
 
}
 
/*
 * 讀取得到的txt文檔讀取獲取到的文本內容
 * @batPath batPath 存放的二進制圖片路徑
 * 
 */
public static String readTextFile(String filePath) {
String IdentificateTxt = null;
String lineTxt = null;
    try {
 
       String encoding = "GBK";
 
       File file = new File(filePath);
 
        if (file.isFile() && file.exists()) { // 判斷文件是否存在
 
            InputStreamReader read = new InputStreamReader(
 
            new FileInputStream(file), encoding);// 考慮到編碼格式              
            BufferedReader bufferedReader = new BufferedReader(read); 
          while ((lineTxt = bufferedReader.readLine()) != null) {               
        Log.info(lineTxt);
        IdentificateTxt = lineTxt;
           }   
           read.close();
 
        } else {
 
            Log.error("----找不到指定的文件"); 
 
      }      } catch (Exception e) {
 
    Log.error("讀取文件內容出錯",e);
 
   }
    return IdentificateTxt;
 
}
/*
 * 讀取的文件流
 * @batPath batPath 存放的二進制圖片路徑
 * 
 */
public static byte[] readInputStream(InputStream inStream) throws Exception{  
    ByteArrayOutputStream utStream = new ByteArrayOutputStream();  
    //創建一個Buffer字符串  
    byte[] buffer = new byte[1024];  
    //每次讀取的字符串長度,如果為-1,代表全部讀取完畢  
    int len = 0;  
    //使用一個輸入流從buffer里把數據讀取出來  
    while( (len=inStream.read(buffer)) != -1 ){  
        //用輸出流往buffer里寫入數據,中間參數代表從哪個位置開始讀,len代表讀取的長度  
        outStream.write(buffer, 0, len);  
    }  
    //關閉輸入流  
    inStream.close();  
    //把outStream里的數據寫入內存  
    return outStream.toByteArray();  
}  
}

 

 


免責聲明!

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



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