https://blog.csdn.net/qq_19383667/article/details/77879895

好久没有更新技术文章了,很久之前研究过滑块验证码的破解,照着别人的代码改,将其他版本的代码改成java的,加上自己的一些研究,凑合凑合出了第一个java版本的,此版本不是控制浏览器进行验证,纯java控制(包含java js引擎执行js),目前都完成了,只是滑动轨迹的生成被后台识别出是机器人,除了这个问题以外,其他的均没有任何问题!如果谁能弄出轨迹算法出来,可以留言或者加我qq:1069478446,不胜感激 

废话不多说,自己上代码:

package com.test;import java.awt.Container;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Random; import javax.imageio.ImageIO; import net.sf.json.JSONObject; import org.apache.http.Header; import org.apache.http.HeaderElement; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.util.DBUtil; public class Geek { DBUtil dbu=new DBUtil(); CloseableHttpClient httpclient = HttpClients.createDefault(); String challenge=""; String gt=""; String json=""; Random rnd = new Random(); public boolean checkVcome() { String url="http://www.tianyancha.com/company/7117464"; HttpGet httpPost=new HttpGet(url); String html=""; try { CloseableHttpResponse response = httpclient.execute(httpPost); HttpEntity entitySort = response.getEntity(); html=EntityUtils.toString(entitySort, "utf-8"); if(html.indexOf("为确认本次访问为正常用户行为,请您协助验证")!=-1) return true; if(!"".equals(html.trim())) { return true; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public void startPama() { String url="http://www.gsxt.gov.cn/SearchItemCaptcha?v="+System.currentTimeMillis(); HttpGet httpPost=new HttpGet(url); httpPost.setHeader("Accept", "application/json, text/javascript, */*; q=0.01"); httpPost.setHeader("Connection", "keep-alive"); httpPost.setHeader("Host", "www.gsxt.gov.cn"); httpPost.setHeader("Referer", "http://www.gsxt.gov.cn/corp-query-homepage.html"); httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); httpPost.setHeader("X-Requested-With", "XMLHttpRequest"); String html=""; try { CloseableHttpResponse response = httpclient.execute(httpPost); HttpEntity entitySort = response.getEntity(); html=EntityUtils.toString(entitySort, "utf-8"); System.out.println(html); JSONObject json=JSONObject.fromObject(html); this.challenge=json.getString("challenge"); this.gt=json.getString("gt"); System.out.println("gt:"+gt); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getpage_comp() { String url="http://api.geetest.com/get.php?gt=#{gt}&challenge=#{challenge}&product=embed&offline=false"; HttpGet httpPost=new HttpGet(url.replace("#{gt}", this.gt).replace("#{challenge}", this.challenge)); httpPost.setHeader("Connection", "Keep-Alive"); httpPost.setHeader("Host", "api.geetest.com"); httpPost.setHeader("Pragma", "no-cache"); httpPost.setHeader("Referer", "http://www.geetest.com/exp_normal"); httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"); String html=""; try { CloseableHttpResponse response = httpclient.execute(httpPost); HttpEntity entitySort = response.getEntity(); html=EntityUtils.toString(entitySort, "utf-8"); int sindex=html.indexOf("new Geetest(")+12; if(sindex<1) return; int eindex=html.indexOf(",true"); this.json=html.substring(sindex, eindex); JSONObject json=JSONObject.fromObject(this.json); this.challenge=json.getString("challenge"); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getImage(String name,String url) { System.out.println(url); try { HttpGet httpimg = new HttpGet(url); httpimg.setHeader("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"); httpimg.setHeader("Connection", "keep-alive"); httpimg.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); httpimg.setHeader("Host", "static.geetest.com"); httpimg.setHeader("Upgrade-Insecure-Requests", "1"); httpimg.setHeader("Referer", "http://www.geetest.com/exp_normal"); HttpResponse responseimg = httpclient.execute(httpimg); File file=new File("E:\\zjt\\img\\"+name+".jpg"); OutputStream out=new FileOutputStream(file); responseimg.getEntity().writeTo(out); out.close(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "E:\\zjt\\img\\"+name+".jpg"; } /** * 合成指定的多张图片到一张图片 * *@param imgSrcList 图片的地址列表 *@param topLeftPointList 每张小图片的偏移量 *@param countOfLine 每行的小图片个数 *@param cutWidth 每张小图片截取的宽度(像素) *@param cutHeight 每张小图片截取的高度(像素) *@param savePath 合并后图片的保存路径 *@param subfix 合并后图片的后缀 *@return 是否合并成功 */ public static boolean combineImages(ArrayList<String> imgSrcList, ArrayList<String[]> topLeftPointList, int countOfLine, int cutWidth, int cutHeight, String savePath, String subfix) { if (imgSrcList == null || savePath == null || savePath.trim().length() == 0) return false; BufferedImage lastImage = new BufferedImage(cutWidth * countOfLine, cutHeight * ((int) (Math.floor(imgSrcList.size() / countOfLine))), BufferedImage.TYPE_INT_RGB); String prevSrc = ""; BufferedImage prevImage = null; try { for (int i = 0; i < imgSrcList.size(); i++) { String src = imgSrcList.get(i); BufferedImage image; if (src.equals(prevSrc)) image = prevImage; else { if (src.trim().toLowerCase().startsWith("http")) image = ImageIO.read(new URL(src)); else image = ImageIO.read(new File(src)); prevSrc = src; prevImage = image; } if (image == null) continue; String[] topLeftPoint = topLeftPointList.get(i); int[] pixArray = image.getRGB(0 - Integer.parseInt(topLeftPoint[0].trim()), 0 - Integer.parseInt(topLeftPoint[1].trim()), cutWidth, cutHeight, null, 0, cutWidth); int startX = ((i) % countOfLine) * cutWidth; int startY = ((i) / countOfLine) * cutHeight; lastImage.setRGB(startX, startY, cutWidth, cutHeight, pixArray, 0, cutWidth); } File file = new File(savePath); return ImageIO.write(lastImage, subfix, file); } catch (Exception ex) { ex.printStackTrace(); return false; } } /** * 通过背景的完整图片与有缺失的图片进行对比,得到偏移量 *@param imgSrc1 有缺失的图片路径 *@param imgSrc2 完整的背景图路径 *@return */ public static int findXDiffRectangeOfTwoImage(String imgSrc1, String imgSrc2) { try { BufferedImage image1 = ImageIO.read(new File(imgSrc1)); BufferedImage image2 = ImageIO.read(new File(imgSrc2)); int width1 = image1.getWidth(); int height1 = image1.getHeight(); int width2 = image2.getWidth(); int height2 = image2.getHeight(); if (width1 != width2) return -1; if (height1 != height2) return -1; int left = 0; /** * 从左至右扫描 */ boolean flag = false; for (int i = 0; i < width1; i++) { for (int j = 0; j < height1; j++) if (isPixelNotEqual(image1, image2, i, j)) { left = i; flag = true; break; } if (flag) break; } return left; } catch (Exception ex) { ex.printStackTrace(); return -1; } } private static boolean

转载于:https://www.cnblogs.com/davidwang456/articles/8662076.html

滑块验证码识别 java版本相关推荐

  1. 滑块验证码识别 java版本

    好久没有更新技术文章了,很久之前研究过滑块验证码的破解,照着别人的代码改,将其他版本的代码改成java的,加上自己的一些研究,凑合凑合出了第一个java版本的,此版本不是控制浏览器进行验证,纯java ...

  2. 腾讯、网易、极验、顶象滑块验证码识别

    背景 验证码识别一直都是一个重要的话题,近日有一些公司询问 本地DLL验证码识别定制的事,可以联系QQ:1106965840 定制本地离线DLL验证码识别.另外给大家普及一下通用验证码识别和滑块缺口检 ...

  3. 麻瓜回归!零代码,零基础,全网最傻瓜式的滑块验证码识别训练框架

    最新更新 07/31/22 修复了系统用户名和路径名包含中文时授权失败的情况 新增了pytorch环境完整性检查(不少用户首次启动安装环境过慢就以为卡死关掉了导致torch运行时不完整) 近几年,滑块 ...

  4. 滑块识别,滑块验证码识别平台,验证码识别

    背景 验证码识别一直都是一个重要的话题,近日有一些公司询问  定制本地离线DLL验证码识别.另外给大家普及一下通用验证码识别和滑块缺口检测的解决方案[滑块]返回坐标:点击进入,如果调用量比较大,建议购 ...

  5. 验证码识别 java 深度学习_使用深度学习识别验证码注解

    前言 在抓取一些网站的时候难免会遇到一些验证码.想起去年接触过一段时间的验证码识别技术,所以把之前使用的开源的cnn识别再拿出来做个注解.加深理解,也方便以后的使用.希望能对大家有所帮助! 正文 网上 ...

  6. java 滑块验证码 开源,Java AWT生成滑动验证码

    最近工作需要在登录时使用滑动验证码做登录校验,在生成验证码图片的时候碰到了不小的麻烦 : (. 网上能查到的做法基本上都是使用一张已存在的实际图片作为滑块的图形模板,然后按照此模板做二重循环逐像素地从 ...

  7. 阿里、腾讯、网易、极验、顶象滑块验证码识别

    阿里滑块 腾讯滑块 网易滑块 极验滑块 顶象滑块

  8. 12306登录验证码识别(Java版)

    懒惰是程序员的第一生产力 源码地址 1 服务器性能差,不要频繁请求(做了熔断保护处理) 2 上传标准图片 3 添加了爬虫爬取验证功能,设置了ajax返回数据的css样式 窝在家里没事干- python ...

  9. 虹软离线人脸识别java版本的SDK使用配置,也是整了半天才看明白一些,总结一下

    1首先你要到虹软的官网–注册登录 https://ai.arcsoft.com.cn/ucenter/user/userlogin 2.登录进去之后: 会让你实名认证,想使用就老老实实认证(哈哈),我 ...

最新文章

  1. python学习必会知识点:对文件操作详解
  2. 28,29_激活函数与GPU加速、Tanh和sigmoid、ReLU、Leaky ReLU、SELU、Softplus、GPU accelerated、案例、argmax
  3. Android开发之shape自定义ProgressBar进度条样式
  4. AT2667-[AGC017D]Game on Tree【SG函数】
  5. linux uboot启动流程分析,uboot启动流程分析
  6. Rsync的配置与使用
  7. Codeforces Round #568 (Div. 2)网卡垫底记
  8. 怎样确定远程计算机ip地址,如何获取远程计算机的IP地址
  9. python怎么根据度分布生成网络_python度分布图
  10. 老电脑xp系统最流畅的浏览器_1步打造极限精简的win10系统,让老电脑像新机般流畅,再也不卡了...
  11. 百旺如何看是否清卡_网上报税清卡如何操作?
  12. protel 99se交互式布局
  13. 电脑进入pe时蓝屏_电脑进入u盘pe系统蓝屏了怎么办
  14. 计算机音乐数字乐谱周杰伦,周杰伦的歌《安静》的数字乐谱是什么??
  15. 远程调试监视器 已在计算机上关闭,错误:“Microsoft Visual Studio 远程调试监视器”(MSVSMON.EXE) 似乎没有在远程计算机上运行。...
  16. 深度学习平台配置 Pytorch+RTX3090+Pycharm
  17. 面经 - 阿里巴巴 - 视频二面
  18. 重庆华侨城跨界联合潮牌T.M.D PCP发财潮流文化艺术聚会国庆开档
  19. linux下brctl配置网桥
  20. JAVA方法3-方法的重载

热门文章

  1. linux平台 使用dlopen接口调用HelloWorld动态库简单实例
  2. 计算机病毒与信息安全论文,信息安全与计算机病毒……毕业论文.doc
  3. 13 登陆_13级!凌晨,“黑格比”登陆!对莆田的最新影响……
  4. python断点续传下载_Python版本,图片,视频断点续传下载
  5. pass在python中啥意思_python3中的pass是什么意思
  6. mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介
  7. 万物皆对象java_又一次认识java(一) ---- 万物皆对象
  8. linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令
  9. android 之四大组件的Activity详解
  10. access sql 取余_计算机二级ACCESS模拟题库2016最新