“易源数据”图片识别API说明文档地址:https://www.showapi.com/api/lookPoint/184

代码模拟的也是“易源数据”的账号注册,主要代码如下:

模拟注册入口-YiYuanUtil.java

package com.vps.api.util;import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;import javax.imageio.ImageIO;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import com.vps.Constants;
import com.vps.api.vo.YiYuanCodeVo;
import com.vps.common.Config;import flexjson.JSONDeserializer;/*** 易源模拟注册工具类* * @author nangongyanya* */
public class YiYuanUtil {/*** 模拟注册* * @param webAddress* @param usernameId* @param username* @param emailId* @param email* @param pwdId* @param pwd* @param comfirmId* @param codeImgId* @param codeValueId* @param agreeId* @param buttonId* @param codeType* @throws InterruptedException */public static void reg(String webAddress, String usernameId, String username, String emailId, String email,String pwdId, String pwd, String comfirmName, String codeImgId, String codeValueId, String agreeId,String buttonId, Integer codeType) throws InterruptedException {/** 获取谷歌插件地址 */String chromdriverPath = "C:\\program_agent\\Google\\Chrome\\Application\\chromedriver.exe";if (StringUtils.isNotBlank(Config.getString("chromedriver_path"))) {chromdriverPath = Config.getString("chromedriver_path");}/** 使用谷歌浏览器打开易源注册页面 */System.setProperty("webdriver.chrome.driver", chromdriverPath);// chromedriver服务地址WebDriver driver = new ChromeDriver();driver.get(webAddress);/** 填写注册数据 */driver.findElement(By.id(usernameId)).sendKeys(username);// 填写用户名driver.findElement(By.id(emailId)).sendKeys(email);// 填写邮箱driver.findElement(By.id(pwdId)).sendKeys(pwd);// 填写密码driver.findElement(By.name(comfirmName)).sendKeys(pwd);// 确认密码driver.findElement(By.id(codeValueId)).sendKeys(getCodeValue(driver, codeImgId, codeType).toLowerCase());// 填写验证码driver.findElement(By.id(agreeId)).click(); // 同意服务条款Thread.sleep(3000);// 等待3秒,查看数据填充情况driver.findElement(By.id(buttonId)).click(); // 点击注册按钮Thread.sleep(5000);// 等待5秒,查看注册结果driver.quit();// 关闭浏览器}/*** 获取验证码* * @param driver* @param codeImgId* @param codeType* @return*/public static String getCodeValue(WebDriver driver, String codeImgId, Integer codeType) {/** 下载验证码 */String imgFile = downloadVerificationCode(driver, codeImgId);/** 使用易源接口获取验证码内容 */String imgBase64 = ImageBase64Util.getLocalImgBase64(imgFile);String result = chatAndNumByBase64(imgBase64, codeType);YiYuanCodeVo vo = new JSONDeserializer<YiYuanCodeVo>().deserialize(result, YiYuanCodeVo.class);String codeValue = vo.getShowapi_res_body().getResult();return codeValue;}/*** 下载验证码* * @param driver* @param codeImgId* @return*/public static String downloadVerificationCode(WebDriver driver, String codeImgId) {try {/** 设置图片名称 */Date now = new Date();String imageName = getAppPath() + "uploads/verification_code/" + now.getTime() + ".jpg";WebElement ele = driver.findElement(By.id(codeImgId));// 获取验证码元素((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", ele);// 滚动条滚动至验证码位置Thread.sleep(3000);// 等待3秒,等待js执行完成/** 计算网页被卷去的高,即滚动条滚动距离 */String jsStr = "var yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop) { yScroll = document.documentElement.scrollTop; } else if (document.body) { yScroll = document.body.scrollTop; } return yScroll;";Long rollHeight = (Long) ((JavascriptExecutor) driver).executeScript(jsStr);// System.out.println("网页被卷去的高: " + rollHeight);/** 保存验证码 */File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);BufferedImage fullImg;fullImg = ImageIO.read(screenshot);Point point = ele.getLocation();int eleWidth = ele.getSize().getWidth();int eleHeight = ele.getSize().getHeight();BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY() - rollHeight.intValue(),eleWidth, eleHeight);ImageIO.write(eleScreenshot, "jpg", screenshot);File screenshotLocation = new File(imageName);FileUtils.copyFile(screenshot, screenshotLocation);return imageName;} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/*** 获取项目根路径* * @return* @throws InterruptedException * @throws IOException */public static final String getAppPath() {String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();path = path.substring(0, path.indexOf("WEB-INF"));if (System.getProperties().get("os.name").toString().toLowerCase().contains("windows")) {path = path.substring(1, path.length());} else {path = File.separator.concat(path);}return path;}/*** 验证码识别英数_base64* * @param imgBase64* @param typeId* @return*/public static String chatAndNumByBase64(String imgBase64, Integer typeId) {try {String urlStr = "http://route.showapi.com/184-5?showapi_appid="+ Constants.YIYUAN_APPID_TEST + "&showapi_sign="+ Constants.YIYUAN_APPID_SECRET + "&img_base64="+ URLEncoder.encode(imgBase64, "utf-8")+ "&convert_to_jpg=1" + "&typeId=" + typeId;URL u = new URL(urlStr);InputStream in = u.openStream();ByteArrayOutputStream out = new ByteArrayOutputStream();try {byte buf[] = new byte[1024];int read = 0;while ((read = in.read(buf)) > 0) {out.write(buf, 0, read);}} finally {if (in != null) {in.close();}}byte b[] = out.toByteArray();System.out.println(new String(b, "utf-8"));return new String(b, "utf-8");} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}public static void main(String[] args) throws InterruptedException, IOException {// TODO 以下参数需要后台定制String webAddress = "https://www.showapi.com/auth/reg";// 网页地址String usernameId = "name";// 用户名IDString username = "situxuanbin";// 用户名String emailId = "email";// 邮箱IDString email = username + "@163.com";// 邮箱String pwdId = "pwd";// 密码IDString pwd = "92863945";// 密码String comfirmName = "repwd";// 确认密码IDString codeImgId = "checkImg";// 验证码图片IDString codeValueId = "checkCode";// 验证码输入框IDString agreeId = "fwtk";// 服务条款IDString buttonId = "regBtn";// 注册按钮ID/*** 注意:最大支持10位的验证码。 1.纯数字* typeId=10 任意长度数字,识别率会降低* typeId=11 1位数字* typeId=12 2位数字* ...* typeId=19 9位数字* * 2.纯英文* typeId=20 任意长度英文,识别率会降低* typeId=21 1位英文* typeId=22 2位英文* ...* typeId=29 9位英文* * 3.英文数字混合* typeId=30 任意长度英数混合,识别率会降低* typeId=31 1位英数* typeId=32 2位英数混合* ...* typeId=39 9位英数混合*/Integer codeType = 35; // 验证码类型reg(webAddress, usernameId, username, emailId, email, pwdId, pwd, comfirmName, codeImgId, codeValueId, agreeId,buttonId, codeType);}
}

图片转Base64字符串工具类-ImageBase64Util.java

package com.vps.api.util;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;import com.thoughtworks.xstream.core.util.Base64Encoder;/*** 图片转Base64字符串工具类* * @author nangongyanya* */
public class ImageBase64Util {/*** 获取在线图片base64字符串* * @param imgUrlStr* @return*/public static String getOnlineImgBase64(String imgUrlStr) {byte[] data = null;  try {  URL url = new URL(imgUrlStr);// 创建URL    HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 创建链接    conn.setRequestMethod("GET");  conn.setConnectTimeout(5 * 1000);  InputStream inStream = conn.getInputStream();  data = new byte[inStream.available()];  inStream.read(data);  inStream.close();  } catch (IOException e) {  e.printStackTrace();  }  Base64Encoder encoder = new Base64Encoder();// 对字节数组Base64编码    return encoder.encode(data);// 返回Base64编码过的字节数组字符串  }/*** 获取本地图片base64字符串* * @param imgUrlStr* @return*/public static String getLocalImgBase64(String imgFile) {InputStream in = null;  byte[] data = null;  /** 读取图片字节数组 */ try {  in = new FileInputStream(imgFile);  data = new byte[in.available()];  in.read(data);  in.close();  } catch (IOException e) {  e.printStackTrace();  }  Base64Encoder encoder = new Base64Encoder();// 对字节数组Base64编码    return encoder.encode(data);// 返回Base64编码过的字节数组字符串 }}

易源验证码vo类-YiYuanCodeBodyVo.java

package com.vps.api.vo;import com.common.util.json.BaseFlexjson;/*** 易源验证码vo* * @author nangongyanya* */
public class YiYuanCodeBodyVo extends BaseFlexjson {private String Result;private Integer ret_code;private String Id;public String getResult() {return Result;}public void setResult(String result) {Result = result;}public Integer getRet_code() {return ret_code;}public void setRet_code(Integer ret_code) {this.ret_code = ret_code;}public String getId() {return Id;}public void setId(String id) {Id = id;}}

易源解析验证码返回结果vo类-YiYuanCodeVo.java

package com.vps.api.vo;import com.common.util.json.BaseFlexjson;/*** 易源解析验证码返回结果vo* * @author nangongyanya* */
public class YiYuanCodeVo extends BaseFlexjson {private String showapi_res_error;private Integer showapi_res_code;private YiYuanCodeBodyVo showapi_res_body;public String getShowapi_res_error() {return showapi_res_error;}public void setShowapi_res_error(String showapi_res_error) {this.showapi_res_error = showapi_res_error;}public Integer getShowapi_res_code() {return showapi_res_code;}public void setShowapi_res_code(Integer showapi_res_code) {this.showapi_res_code = showapi_res_code;}public YiYuanCodeBodyVo getShowapi_res_body() {return showapi_res_body;}public void setShowapi_res_body(YiYuanCodeBodyVo showapi_res_body) {this.showapi_res_body = showapi_res_body;}}

如有疑问欢迎在评论区留言交流!

JAVA + Selenium + 易源识别图片验证码模拟注册相关推荐

  1. python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)

    学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...

  2. 用Python模拟识别图片验证码并发送手机验证码

    1.导语 大家好,好久不见.又到每日分享Python小技能的时候了.最近因为疫情影响,所以更新内容比较慢-今天周一,就来更新一波,心血来潮,是时候上线经营了.其实也没想到有啥好分享的,不如分享一些干货 ...

  3. 使用第三方打码平台图鉴识别滑动验证码模拟登录

    文章目录 一.图鉴的账户注册 识别流程 二.欧模网案例滑动验证码模拟登录 页面分析 三.代码分析 四.欧模网案例展示 总结 一.图鉴的账户注册 图鉴网页地址: http://www.ttshitu.c ...

  4. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

  5. 易语言python识别图片验证码_图片识别-打码平台-打码网站-识别验证码-图鉴网络科技有限公司...

    Android脚本 Import "Cjson.lua" Import "ttddm.lua" Import "ShanHai.lua" / ...

  6. 易语言python识别图片验证码_TensorFlow实战:验证码识别 (少样本高精度)

    项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言本项目适用于Python3.6,GPU>=NVIDIA GTX1050Ti,原maste ...

  7. python selenium 验证码识别_Python网络爬虫之如何用代码识别图片验证码

    验证码 当我们在爬取某些网站的时候,对于一些频繁请求,网站会识别你是机器还是人.如果是机器,直接不允许你访问这个网站了,直接返回404或者禁止访问. 最常见的方式就是验证码.验证码的主要功能就是区分当 ...

  8. 教程 | 用Python识别图片验证码中的文字

    作者 | 老表 来源 | 简说Python(ID:xksnh888xksnh888) [导语]在今天这篇文章中,作者分享给大家一个有趣又干货满满的 Python 项目.通过这份教程,大家不仅又多了一个 ...

  9. 如何识别图片验证码?

    全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCH ...

  10. Reptile:requests + 云打码平台实现 识别图片验证码登陆

    使用requests加上打码平台云打码,实现登陆有图片验证的网站,是图片验证码. 豆瓣的登陆验证方式换了,换成点击验证和图片滑动验证组合的了,所以实验对象不能使用豆瓣了 图片不能是JS写入的,必须得有 ...

最新文章

  1. SQL反模式笔记17——用一条sql解决复杂问题
  2. CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础
  3. SSM项目 Jquery实现From表单提交 json后台并接受
  4. 顶岗实习周记java方向_会计学院顺利召开2021届毕业生顶岗实习动员大会
  5. python下面的代码_求下面python代码的差别。
  6. labeme批量转换json文件_Python实现markdown文件批量转换为word
  7. 火柴人小程序linux,火柴人手绘小程序
  8. blog.1z5k.com
  9. tecplot360的宏命令
  10. MD5在线解密工具推荐
  11. Virtualbox主机与虚拟机相互访问
  12. 使用51单片机驱动航模无刷电机
  13. 没有搭讪的人生是不完整的
  14. DS18B20温度传感器(STM32F103C8T6)
  15. html5 网易公开课,麻省理工学院公开课:单变量微积分习题课
  16. YOLOv5、CNN、SVM实现车牌检测
  17. 使用安卓原生系统刷机,修改
  18. 怎样放大图片保持清晰度?
  19. JS 遍历对象 jQuery遍历对象
  20. 百度地图 标记聚合器MarkerClusterer结合TextIconOverlay,根据标记点的属性更换聚合器的样式

热门文章

  1. springboot毕设项目银行助学贷款管理系统0o571(java+VUE+Mybatis+Maven+Mysql)
  2. Windows Server 2008 RC1标准版
  3. 《机器学习实战》--资料下载和运行环境
  4. UnionID与OpenID的区别【转自微信官方文档】
  5. 宋宝华linux内核驱动代码,宋宝华 《Linux设备驱动开发详解》示例代码之fifo字符设备驱动...
  6. springboot test
  7. 2016年计算机网络考研真题及解析
  8. 全面|机房精密空调设计,看完你就明白了
  9. ftp连接显示被服务器被拒绝,ftp连接服务器被拒绝原因
  10. 【小游戏】2D游戏你比划我来猜(unity和陀螺仪交互)