【java+selenium3】Tesseract-OCR识别图片验证码 (十六)
【java+selenium+Tesseract-OCR(图片识别)+AutoIt(windows窗口识别)】完成自动化图片验证码识别! 一、AutoIt(windows窗口识别)参考:https://www.cnblogs.com/xiaozhaoboke/p/11138548.html 二、Tesseract-OCR(图片识别) 1. 官网下载 tesseract:http://sourceforge.net/projects/tesseract-ocr/ ? ?历史版本下载:https://digi.bib.uni-mannheim.de/tesseract/ 2.安装tesseract,安装成功需要配置环境变量 PATH:安装目录(C:Program Files (x86)Tesseract-OCR) TESSDATA_PREFIX:C:Program Files (x86)Tesseract-OCRtessdata 3.语言库地址为:https://github.com/tesseract-ocr/tessdata ? ?将所需要的语言库下载下来,放在F:Program Files (x86)Tesseract-OCRtessdata目录下 4.将tesseract.exe命令保存为bat文件,bat内容为 @echo off tesseract.exe D:yzmyan.png D:yzmresult -l exit 或者 @echo off tesseract.exe D:yzmyan.png D:yzmresult -psm 6 exit //注解: //图片路径D:yzmyan.png 生成txt文件存放路径及文件名result tesseract.exe D:yzmyan.png D:yzmresult -l tesseract.exe D:yzmyan.png D:yzmresult -psm 6 5.java调用该bat文件 public static void main(String[] args) { String cmd = "cmd /k start D:/yzm/tesseract.bat"; try { Runtime.getRuntime().exec(cmd); } catch (Exception e) { e.printStackTrace(); } } //知识扩展 cmd命令执行窗口开闭指令 cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。 cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。 cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。 运行成功后,会生成一个result.txt文件,该文件保存了验证码的文本内容 package cn.xiaobing.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class ReadYZM { /** * 使用Tesseract-OCR识别图片验证码 */ public static String read_yzm() { String cmd = "cmd /c start D:/yzm/tesseract.bat"; try { Runtime.getRuntime().exec(cmd); } catch (Exception e) { e.printStackTrace(); } try { //线程阻塞3秒等待tesseract.bat执行完成 Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //执行tesseract.bat识别图片后生成result.txt文件中保存识别后验证码 //读取result.txt文件获取验证码 // ReadTxt String yzmTxt = readTxt("D:/yzm/result.txt"); return yzmTxt; } /**传入txt路径读取txt文件 * @param txtPath * @return 返回读取到的内容 */ public static String readTxt(String txtPath) { File file = new File(txtPath); if(file.isFile() && file.exists()){ try { FileInputStream fileInputStream = new FileInputStream(file); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuffer sb = new StringBuffer(); String text = null; while((text = bufferedReader.readLine()) != null){ sb.append(text); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } } return null; } } 7.web自动化实战演示 package cn.xiaobing.cases; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.testng.annotations.Test; import cn.xiaobing.util.CreateElementScreenshot; import cn.xiaobing.util.ReadYZM; public class TestCase01 extends BaseCase { @Test public void test() throws InterruptedException { driver.get("http://sh.ipyy.com:8888/logins.html"); WebElement element = driver.findElement(By.id("yzmimg")); File img = CreateElementScreenshot.captureElement(element); try { //调用FileUtils工具类,复制img图片,new File保存至新的路径下 FileUtils.copyFile(img,new File("D:/yzm/yzm.png")); Thread.sleep(3000); //使用Tesseract-OCR识别图片验证码 String str = ReadYZM.read_yzm(); driver.findElement(By.id("code")).sendKeys(str); Thread.sleep(3000); } catch (IOException e) { e.printStackTrace(); } } } 代码执行验证码自动输入展示: 8.总结:使用Tesseract-OCR识别图片验证码成功率太低,正在寻找更好的方法! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 推荐用于Windows的免费和小型DNS服务器
- 如何在Window中的嵌入式浏览器中调试Javascript?
- 如何在windows git bash shell中访问此环境变量
- 使用基于Windows的RADIUS(NPS)的SuperMicro IPMI
- windows – 活动目录:如何回答“此用户是否属于该组(直接或
- windows-8 – 在SuspensionManager.SessionState中存储字符
- windows – 可以将特定文件移动到磁盘的开头?
- windows-server-2012-r2 – 如何在Windows Server 2012 r2中
- Windows锁定时获取桌面的屏幕截图(Win L)
- 在Windows上使用音频检测进程