验证码: 如下,在进行自动化测试,遇到验证码的问题,一般有两种方式
(java)
http://www.bubuko.com/infodetail-1007293.html
Webdriver配合Tesseract-OCR 自动识别简单的验证码
标签:des class style log com http 使用 代码 src
验证码: 如下,在进行自动化测试,遇到验证码的问题,一般有两种方式
1.找开发去掉验证码或者使用万能验证码
2.使用OCR自动识别
使用OCR自动化识别,一般识别率不是太高,处理一般简单验证码还是没问题
这里使用的是Tesseract-OCR,下载地址:https://github.com/A9T9/Free-Ocr-Windows-Desktop/releases
怎么使用呢?
进入安装后的目录:
tesseract.exe test.png test -1
准备一份网页,上面使用该验证码
<html> <head> <title>Table test by Young</title> </head> <body></br> <h1> Test </h1><imgsrc="http://csujwc.its.csu.edu.cn/sys/ValidateCode.aspx?t=1"></br> </body> </html>
要识别验证码,首先得取得验证码,这两款采取对 页面元素部分截图的方式,首先获取整个页面的截图
然后找到页面元素坐标进行截取
/*** This method for screen shot element* *@paramdriver*@paramelement*@parampath*@throwsInterruptedException*/public static voidscreenShotForElement(WebDriver driver,WebElement element, String path)throwsInterruptedException {File scrFile=((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);try{Point p=element.getLocation();int width =element.getSize().getWidth();int height =element.getSize().getHeight();Rectangle rect= newRectangle(width, height);BufferedImage img=ImageIO.read(scrFile);BufferedImage dest=img.getSubimage(p.getX(), p.getY(),rect.width, rect.height);ImageIO.write(dest,"png", scrFile);Thread.sleep(1000);FileUtils.copyFile(scrFile,newFile(path));}catch(IOException e) {e.printStackTrace();}}
截取完元素,就可以调用Tesseract-OCR生成text
//use Tesseract to get stringsRuntime rt =Runtime.getRuntime();rt.exec("cmd.exe /C tesseract.exe D:\\Tesseract-OCR\\test.png D:\\Tesseract-OCR\\test -1 ");
接下来通过java读取txt
/*** This method for read TXT file* *@paramfilePath*/public static voidreadTextFile(String filePath) {try{String encoding= "GBK";File file= newFile(filePath);if (file.isFile() && file.exists()) { //判断文件是否存在InputStreamReader read = newInputStreamReader(new FileInputStream(file), encoding);//考虑到编码格式BufferedReader bufferedReader = newBufferedReader(read);String lineTxt= null;while ((lineTxt = bufferedReader.readLine()) != null) {System.out.println(lineTxt);}read.close();}else{System.out.println("找不到指定的文件");}}catch(Exception e) {System.out.println("读取文件内容出错");e.printStackTrace();}}
整体代码如下:
1 packagecom.dbyl.tests;2 3 importjava.awt.Rectangle;4 importjava.awt.image.BufferedImage;5 importjava.io.BufferedReader;6 importjava.io.File;7 importjava.io.FileInputStream;8 importjava.io.IOException;9 importjava.io.InputStreamReader;10 importjava.io.Reader;11 importjava.util.concurrent.TimeUnit;12 13 importjavax.imageio.ImageIO;14 15 importorg.apache.commons.io.FileUtils;16 importorg.openqa.selenium.By;17 importorg.openqa.selenium.OutputType;18 importorg.openqa.selenium.Point;19 importorg.openqa.selenium.TakesScreenshot;20 importorg.openqa.selenium.WebDriver;21 importorg.openqa.selenium.WebElement;22 23 importcom.dbyl.libarary.utils.DriverFactory;24 25 public classTesseractTest {26 27 public static void main(String[] args) throwsIOException,28 InterruptedException {29 30 WebDriver driver =DriverFactory.getChromeDriver();31 driver.get("file:///C:/Users/validation.html");32 driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);33 WebElement element = driver.findElement(By.xpath("//img"));34 35 //take screen shot for element 36 screenShotForElement(driver, element, "D:\\Tesseract-OCR\\test.png");37 38 driver.quit();39 40 //use Tesseract to get strings 41 Runtime rt =Runtime.getRuntime();42 rt.exec("cmd.exe /C tesseract.exe D:\\Tesseract-OCR\\test.png D:\\Tesseract-OCR\\test -1 ");43 44 Thread.sleep(1000);45 //Read text 46 readTextFile("D:\\Tesseract-OCR\\test.txt");47 }48 49 /** 50 * This method for read TXT file51 *52 *@paramfilePath53 */ 54 public static voidreadTextFile(String filePath) {55 try{56 String encoding = "GBK";57 File file = newFile(filePath);58 if (file.isFile() && file.exists()) { //判断文件是否存在 59 InputStreamReader read = newInputStreamReader(60 new FileInputStream(file), encoding);//考虑到编码格式 61 BufferedReader bufferedReader = newBufferedReader(read);62 String lineTxt = null;63 while ((lineTxt = bufferedReader.readLine()) != null) {64 System.out.println(lineTxt);65 }66 read.close();67 } else{68 System.out.println("找不到指定的文件");69 }70 } catch(Exception e) {71 System.out.println("读取文件内容出错");72 e.printStackTrace();73 }74 }75 76 /** 77 * This method for screen shot element78 *79 *@paramdriver80 *@paramelement81 *@parampath82 *@throwsInterruptedException83 */ 84 public static voidscreenShotForElement(WebDriver driver,85 WebElement element, String path) throwsInterruptedException {86 File scrFile =((TakesScreenshot) driver)87 .getScreenshotAs(OutputType.FILE);88 try{89 Point p =element.getLocation();90 int width =element.getSize().getWidth();91 int height =element.getSize().getHeight();92 Rectangle rect = newRectangle(width, height);93 BufferedImage img =ImageIO.read(scrFile);94 BufferedImage dest =img.getSubimage(p.getX(), p.getY(),95 rect.width, rect.height);96 ImageIO.write(dest, "png", scrFile);97 Thread.sleep(1000);98 FileUtils.copyFile(scrFile, newFile(path));99 } catch(IOException e) {100 e.printStackTrace();101 }102 }103 104 }
View Code
Webdriver配合Tesseract-OCR 自动识别简单的验证码
标签:des class style log com http 使用 代码 src
2015年11月05日 (2152)
2015年11月04日 (1852)
2015年11月03日 (1679)
2015年11月02日 (1920)
2015年11月01日 (1271)
2015年10月31日 (1325)
2015年10月30日 (1667)
2015年10月29日 (2108)
2015年10月28日 (1966)
- 45种攻入网站后台的方法 2014-09-21
- chrome jsonView插件安装 2015-03-26
- 将Web项目War包部署到Tomcat服务器基本步骤 2015-01-17
- dubbox开发rest+json指南【转】 2014-11-23
- HTML中的<select>标签如何设置默认选中的选项 2014-11-12
- 论文笔记:Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks 2015-06-17
- CSS实现响应式全屏背景图 2015-03-14
- WebStorm+Node.js开发环境的配置 2015-03-13
- CSS属性 2015-03-14
- 312个免费高速HTTP代理IP(能隐藏自己真实IP地址) 2015-04-14
- 揭秘谷歌AMP项目:它是如何提高网页加载速度的? 2015-11-05
- 百度通过跟踪用户发现鬼城 2015-11-05
- 国产大飞机C919换上航空公司涂装效果图 2015-11-05
- 入室小偷竟替户主代签收快递 案发后被快递员指认 2015-11-05
- 三季度空气净化器品牌口碑排行榜 2015-11-05
- BBC商店上线 可付费下载数字内容 2015-11-05
- 苹果新专利:指纹进入应急模式,iPhone 可能救你一命 2015-11-05
- 研究显示Android和iOS应用都会大量收集用户数据 2015-11-05
- 北京移动VoLTE试商启动 推4G高清语音业务 2015-11-05
- 保险业规定使用国内科技产品引国外团体不满 2015-11-05
阳和移动开发 汇智网 易捷博客网 天码营 HarriesBlog 程序员客栈 情怀
验证码: 如下,在进行自动化测试,遇到验证码的问题,一般有两种方式相关推荐
- java actionchains,UI自动化测试:模拟组合按键操作的2种方式
前言 在UI自动化测试的时候,可能会遇到键盘按键的组合操作,比如ctrl+c,ctrl+v等,类似于我们手动操作的快捷键.可以有两种方式实现:一种是selenium中自带的ActionChains结合 ...
- python自动输入验证码_python下的自动化测试--selenium 验证码输入问题
之前一直在研究scrapy下数据抓取,在研究ajax数据抓取时碰巧研究了一下selenium,确实很实用,不过只做scrapy下的数据抓取,不怎么合适,一是性能的损耗,一直需要开一个浏览器,二是对于爬 ...
- Android获取短信验证码并自动填充的两种方式
有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框.所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无 ...
- 两种方式识别“传统”图片验证码
目前,很多网站为了反爬都会采取各种各样的策略,比较简单粗暴的一种做法就是图片验证码,随着爬虫技术与反爬技术的演变,目前验证码也越来越复杂,比较高端的如Google的I'm not a robot,极验 ...
- android 短信验证码自动填写的两种方式
https://blog.csdn.net/u010399316/article/details/48781319 https://www.01hai.com/note/av123438 https: ...
- java绘制图片验证码两种方式实现,点击【图片】刷新和点击【看不清换一张】刷新
转载地址:https://blog.csdn.net/Jiang_Rong_Tao/article/details/78063295 点击打开链接 1.(看不清,换一张),点击刷新验证码 <im ...
- Appium 自动化测试配置wda的两种方式。
tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appium与iPhone(基于xcuitest)设备进行通信而添加的.但是,这个模块在是一个独立的项目,在使 ...
- 自动化测试解决验证码问题
现在的很多网站在登陆时都需要验证码,倘若遇到自动化测试时,怎么解决呢? 验证码大概有以下几种: 有的是图片验证码:图片上显示数字,汉字,英文数字以及算术题等: 有短信/邮箱发送验证码:一般为四位/六位 ...
- php点击图片更新验证码,thinkphp点击图片刷新验证码
本类验证码功能刷新功能,涉及到两个刷新,一个是点击验证码图片刷新,另一个是输错验证码刷新,当然自己刷新那就不要说了,那是肯定会刷新的.thinkPHP框架里面内置了verify.class.php验证 ...
最新文章
- 国内少儿眼中的编程:“Coding即是代码”?
- DL之NN:利用(本地数据集50000张数据集)调用自定义神经网络network.py实现手写数字图片识别94%准确率
- 字符输出流写文本文件【Writer、FileWriter 、BufferedReader 】
- W3C标准的理解(2015.3.7)(陆续更新中)
- Orchard: module开发基础技术知识
- 人脸检测(四)--CART原理及实现
- QTP的那些事--打开脚本文件弹出“unexpected file format”错误
- Problem 1036 四塔问题
- HLI测试 涉及书籍
- PID实现水平姿态角控制
- 小鹿线前端课程怎么样
- 计算机云什么不同步,微云同步盘和腾讯微云的区别!微云只上传不同步-太平洋电脑网...
- 程序员真的干到35就干不动了吗?
- 重磅长文!先进院李骁健等人:在体神经界面技术的发展-从小到大规模记录
- 令人心酸至极的100个微瞬间
- 积目服务器维护,搭建经济高效的制作网络服务器群试验平台
- 互联网日报 | 贾跃亭乐视网股票流拍;东航组建“三亚国际航空”;苹果线上WWDC大会22日举办...
- 利用Windows 计划任务定时将本地文件复制到共享文件夹
- 网易云音乐前端模块动态下发系统
- 疑难杂症:同网段ping不通,跨网段建不了链,怎么破?
热门文章
- 【自动驾驶行业观察】Mobileye RSS
- python keyboard 键盘自动控制库
- 小白自学python的编程之路——实现进制数转换(十进制和二进制和八进制的转换)
- mysql 5.7 exe_mysql 5.7 版本 windows 安装
- 云计算网络工程师路线图_职业路线图:云工程师
- java asq_Java并发:AQS原理
- Threejs_贴图
- c语言个人通讯录管理系统实验报告_C语言个人通讯录管理系统课程设计报告
- 2011级-csdn-java-张侃—Spring(2)
- 基于FPGA的CAN总线控制器的设计(上)