如果在java中硒和OpenCV破解易盾滑动验证码

  介绍

如果在java中硒和OpenCV破解易盾滑动验证码?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>网易易盾:dun.163.com

*,验证码地址:https://dun.163.com/trial/jigsaw   *,使用OpenCv模板匹配   + *,Java  Selenium  +, OpenCV /* *   ,*模拟人工移动   ,* @param 司机   ,* @param 元素页面滑块   ,* @param 距离需要移动距离   ,*/public  static  void 移动(WebDriver 司机,WebElement 元素,,int 距离),throws  InterruptedException  {   int  randomTime =, 0;   if  (distance 祝辞,90),{   时间=randomTime  250;   },else  if  (distance 祝辞,80,,,,distance  & lt;=, 90), {   时间=randomTime  150;   }   List

<>强操作过程

,*,获取网易验证滑动距离
  *大敌;
  ,* @return
  ,*/public  static  String  dllPath =,“C://铬//opencv_java440.dll";
  
  public  double  getDistance (String 节,String  sUrl), {
  System.load (dllPath);
  File  bFile =, new 文件(“C:/EasyDun_b.png");
  File  sFile =, new 文件(“C:/EasyDun_s.png");
  try  {
  FileUtils.copyURLToFile (new  URL(节),bFile);
  FileUtils.copyURLToFile (new  URL (sUrl), sFile);
  BufferedImage  bgBI =, ImageIO.read (bFile);
  BufferedImage  sBI =, ImageIO.read (sFile);//,裁剪
  cropImage (bgBI,印度国家银行,,bFile,, sFile);
  Mat  s_mat =, Imgcodecs.imread (sFile.getPath ());
  Mat  b_mat =, Imgcodecs.imread (bFile.getPath ());//阴影部分为黑底时需要转灰度和二值化,为白底时不需要//,转灰度图像
  Mat  s_newMat =, new 垫();
  Imgproc.cvtColor (s_mat, s_newMat, Imgproc.COLOR_BGR2GRAY);//,二值化图像
  (二值化s_newMat);
  Imgcodecs.imwrite (sFile.getPath (),, s_newMat);
  
  int  result_rows =, b_mat.rows(),安康;s_mat.rows (), +, 1;
  int  result_cols =, b_mat.cols(),安康;s_mat.cols (), +, 1;
  Mat  g_result =, new 垫(result_rows, result_cols,, CvType.CV_32FC1);
  Imgproc.matchTemplate (b_mat, s_mat, g_result,, Imgproc.TM_SQDIFF);,//,归一化平方差匹配法TM_SQDIFF 相关系数匹配法TM_CCOEFF
  
  Core.normalize (g_result, g_result,, 0,, 1,, Core.NORM_MINMAX,, 1,, new 垫());
  Point  matchLocation =, new 点();
  MinMaxLocResult  mmlr =, Core.minMaxLoc (g_result);
  时间=matchLocation  mmlr.maxLoc;,//,此处使用maxLoc还是minLoc取决于使用的匹配算法
  Imgproc.rectangle (b_mat, matchLocation, new 点(时间+ matchLocation.x  s_mat.cols (),, matchLocation.y  +, s_mat.rows ()),, new 标量(0,,255,,0,0));
  Imgcodecs.imwrite (bFile.getPath (),, b_mat);
  return  matchLocation.x  +, s_mat.cols(),安康;sBI.getWidth (), +, 12;
  },catch  (Throwable  e), {
  e.printStackTrace ();
  return  0;
  },{finally 
  ,bFile.delete ();
  ,sFile.delete ();
  }
  }/* *
  ,*图片亮度调整
  *大敌;
  ,* @param 形象
  ,* @param 参数
  ,* @throws  IOException
  ,*/public  void  bloding (BufferedImage 形象,,int 参数),throws  IOException  {
  if  (image ==, null), {
  返回;
  },{else 
  int , rgb, R, G, B;
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

如果在java中硒和OpenCV破解易盾滑动验证码