java selenium tess4j识别验证码模拟登陆。
来源:互联网 发布:淘宝奥巴狗游戏 编辑:程序博客网 时间:2024/06/06 00:40
使用tess4j原因是验证码图片地址由js动点击打开链接态生成,和时间戳有关,导致常规爬虫获取图片地址下载的方法得到的验证码与网页显示的不同,所以想到使用截屏方案截取验证码图片,使用tess4j进行识别,达到自动识别的目的,识别率有点低。
版本java1.8 tess4j 3.4 selenium-java 3.6.0
1.eclipse新建java项目,将下载的tess4j解压后,将dist目录下的jar文件复制到lib目录下,然后将lib目录,src目录,tessdata目录复制到新建的java项目中,将下载的selenium-java中所有jar文件复制到eclipse新建的项目中。
2.将所有jar文件添加到build path中,windows下,将tess4j解压目录下lib目录下win32-x86(32位系统)或win32-x86-64(64位系统)下dll文件导入到项目中。linux开发环境需要将tesseract-ocr的so文件复制到对应目录,步骤应该如下:
安装leptonica
wget http://www.leptonica.org/source/leptonica-1.71.tar.gz
tar -zxvf ...
./configure
make
make install
安装tesseract-ocr
wget http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz
./autogen.sh
./configure
make
make install
ldconfig
参考:http://www.jianshu.com/p/51537319a467
已经配置tesseract-ocr执行下面命令:主要看linux系统so文件放到了哪里。
cp /usr/local/lib/*.so.* /usr/lib64/ centos
cp /usr/local/lib/*.so.* /usr/lib/ ubuntu
若不安装,则下载所有so文件,然后将目录下的文件复制到对应目录下
3.项目环境配置完毕,关键代码如下:
识别简单验证码函数,参数为图片路径,验证码由字母和数字组成:
public String IdentifyCode(String path) {File imageFile = new File(path);ITesseract instance = new Tesseract();//图片二值化,增加识别率BufferedImage grayImage = null;try {grayImage = ImageHelper.convertImageToBinary(ImageIO.read(imageFile));} catch (IOException e2) {e2.printStackTrace();}try {ImageIO.write(grayImage, "png", new File(System.getProperty("user.dir") + "/img", "vc1.png"));} catch (IOException e1) {e1.printStackTrace();}String path1 = System.getProperty("user.dir") + "/img/vc1.png";File imageFile1 = new File(path1);String result = null;try {result = instance.doOCR(imageFile1);} catch (TesseractException e1) {e1.printStackTrace();}result=result.replaceAll("[^a-z^A-Z^0-9]", ""); return result;}
selenium区域截图函数:
public byte[] takeScreenshot(WebDriver driver) throws IOException {WebDriver augmentedDriver = new Augmenter().augment(driver);return ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.BYTES);}public BufferedImage createElementImage(WebDriver driver, WebElement webElement,int x,int y,int width,int heigth) throws IOException {Dimension size = webElement.getSize();BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(takeScreenshot(driver)));// Point location = webElement.getLocation();// BufferedImage croppedImage = originalImage.getSubimage(location.getX(),location.getY(), size.getWidth(),size.getHeight());//linux注释下面一行代码,取消此行和上一行注释,可正确截图BufferedImage croppedImage = originalImage.getSubimage(x, y, size.getWidth() + width, size.getHeight() + heigth);//windows下,浏览器最大化后浏览器截图,获取的x、y坐标不可直接使用,推测和屏幕分辨率有关。return croppedImage;}4.浏览器及驱动下载目录,可去http://www.seleniumhq.org/download/下载,
其中主要浏览器下载:
火狐驱动: https://github.com/mozilla/geckodriver/releases/
IE驱动: http://selenium-release.storage.googleapis.com/index.html
谷歌驱动: http://chromedriver.storage.googleapis.com/index.html(谷歌浏览器驱动下载地址)
http://blog.csdn.net/huilan_same/article/details/51896672(对应版本)
驱动放到浏览器安装目录下,也可以代码中指定路径:
如:
System.setProperty("webdriver.gecko.driver", driverPath); //火狐浏览器驱动
System.setProperty("webdriver.chrome.driver", driverPath);//谷歌浏览器驱动
注意驱动版本应与浏览器版本对应。
- java selenium tess4j识别验证码模拟登陆。
- 验证码识别(Tess4J初体验)
- 验证码识别(Tess4J初体验)
- 验证码识别(Tess4J初体验)
- selenium模拟登陆时截取验证码
- java识别验证码-用tess4j实现超简单调用tessreact-orc来破解验证码
- C# 模拟登陆、识别验证码
- CMCC-EDU 模拟登陆中的验证码识别
- python模拟登陆知乎(手工识别验证码)
- python模拟登陆豆瓣网和验证码识别
- Java使用Tess4J 进行图片文字识别
- Java使用Tess4J 进行图片文字识别
- JAVA使用Tess4j识别图片内容
- java使用Tess4j 识别图片文字
- Java OCR文字识别(Tess4J)
- 【Python模拟登录】py2模拟登陆CSDN(人工识别验证码)
- 【Python】【验证码识别】python 模拟登陆时,验证码自动识别问题
- Python selenium自动化识别验证码模拟登录操作(二)
- Python 类属性,实例属性,类方法,实例方法,静态方法
- 10月3日 c语言简单循环 在全系1000学生中,征集慈善捐款,当达到10万元就结束。
- 数据库入门级指令操作
- 【poj 1990】MooFest(树状数组)
- spring和mybatis的整合使用,未使用整合包的情况下maven用5可实现
- java selenium tess4j识别验证码模拟登陆。
- jQueryy原生js实现---hover事件
- 搬瓦工搭建VPS 再利用腾讯云做中转 最后使用pac模式
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- C++随笔——悬空指针(dangling pointers)
- 高级C语言教程-作用域
- Spark Streaming累加器与广播的简单应用
- TCP连接的状态与关闭方式,及Windows系统下的TCP参数优化
- 初学Python第三天