特点: 对于极验验证码3.0版本,我们首先点击按钮进行智能验证。如果验证不通过,则会弹出滑动的验证的窗口,拖动滑块拼合图像进行验证。之后三个加密参数会生成,通过表单提交到后台,后台还会进行一次验证。

极滑2.0的破解思路:

  1. 模拟点击验证按钮
    直接用Selenium模拟点击按钮
  2. 识别滑动缺口的位置
    利用原图和缺口图对比检测方式来识别缺口的位置,通过遍历俩张图片,找出相同位置像素RGB差距超过此阀值的像素点,那么此像素点的位置就是缺口的位置。
  3. 模拟拖动滑块
    模拟人的移动轨迹通过验证,一般是先加速后减速。

破解的重要点就是:识别滑动缺口的位置。
但是极滑3.0进行了更新,我们点击按钮进行智能验证,然后截图,但是获取到的不再是完整的原图,而是带有缺口的原图,这样子,我们就不能使用极滑2.0的办法来获取到滑动缺口的位置,需要另想获取滑动缺口的位置,下面有分别俩个办法来获取极滑3.0的缺口位置:


方法一、通过超级鹰平台(本博客将以该方法为测试案例)

  1. 通过超级鹰验证码破解平台,我们先截图获取带有缺口的验证码图片,然后再在图片上加上”请点击凹槽左上交“ 这几个打字,然后通过接口发送超级鹰验证平台,他们就会返回给我们凹槽的左上角位置
    获取得到的验证码:

    需要添加上”请点击凹槽左上角“,超级鹰才能知道是识别滑动缺口图片的凹槽位置

    超级鹰返回的结果为字典类型,其中键"pic_str"的值为结果坐标(60, 52):

    图片凹槽的左上角的真实位置为(58,53):
方法二、不断截图

通过滑动小块按钮,从左边到右边,然后不断保存滑动过的轨迹和截图到的照片到字典中,通过照片分析,找到其中没有凹槽的图片,也就是将滑块移动到符合位置的轨迹,至于怎么在那么多截图中找到最合适的那种找完美的图片,这个就需要图片处理的算法,这个下次再弄,这次尝试了方法一。


方法一代码:chaojiying.py 、geetest_spider.py

chaojiying.py: 需要使用到超级鹰平台,读者可以看我上一篇博客,有讲到如何注册使用,在geetest_spider.py中需要用到超级鹰的账号、密码、软件ID,这个模块就无要更改

import requests
from hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode("utf-8")).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()if __name__ == '__main__':# todo:用户中心>>软件ID 生成一个替换 96001chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID')# todo:  本地图片文件路径 来替换 a.jpg 有时WIN系统须要//im = open('target.png', 'rb').read()    # todo:  9101 验证码类型, 滑动验证码就不需要更改                                             result = chaojiying.PostPic(im, 9101)print(result)

geetest_spider.py:需要修改CrackGeetest类中的get_gap()方法中的超级鹰账号、密码以及软件ID

import time
from io import BytesIO
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from chaogjiying import Chaojiying_Client
from PIL import ImageFont
from PIL import Image
from PIL import ImageDrawEMAIL = 'cqc@cuiqingcai.com'
PASSWORD = '123456'
BORDER_1 = 8
BORDER_2 = 15
BORDER_3 = 28class CrackGeetest(object):def __init__(self):self.url = 'https://account.geetest.com/login'self.browser = webdriver.Chrome()self.browser.maximize_window()self.wait = WebDriverWait(self.browser, 5)self.email = EMAILself.password = PASSWORDself.success = Falseself.try_num = 3self.now_num = 3self.flesh_num = 1def __del__(self):self.browser.close()def get_geetest_button(self):"""获取初始验证按钮:return: 初始化验证按钮"""button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_radar_tip')))return buttondef get_position(self):"""获取验证码位置:return: 验证码位置元组"""img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))time.sleep(0.5)location = img.locationsize = img.sizetop, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']return top, bottom, left, rightdef get_screenshot(self):"""获取网页截图:return: 截图对象"""screenshot = self.browser.get_screenshot_as_png()screenshot = Image.open(BytesIO(screenshot))return screenshotdef get_slider(self):"""获取滑块:return: 滑块对象"""try:slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))except Exception:self.crack()return return sliderdef get_geetest_image(self, name='captcha.png'):"""获取验证码图片:return: 图片对象"""top, bottom, left, right = self.get_position()screenshot = self.get_screenshot()captcha = screenshot.crop((left, top, right, bottom))captcha.save(name)return captchadef open(self):"""打开网页输入用户名密码:return: None"""self.browser.get(self.url)time.sleep(0.5)email = self.browser.find_elements_by_xpath("//i[@class='icon-email']/../../input")[0]password = self.browser.find_element_by_xpath("//i[@class='icon-password']/../../input")email.send_keys(self.email)password.send_keys(self.password)@staticmethoddef get_track(distance):"""根据偏移量获取移动轨迹:param distance: 偏移量:return: 移动轨迹"""# 移动轨迹track = []# 当前位移current = 0# 减速阈值mid = distance * 4 / 5# 计算间隔t = 0.2# 初速度v = 0while current < distance:if current < mid:# 加速度为正2a = 2else:# 加速度为负3a = -3# 初速度v0v0 = v# 当前速度v = v0 + atv = v0 + a * t# 移动距离x = v0t + 1/2 * a * t^2move = v0 * t + 1 / 2 * a * t * t# 当前位移current += move# 加入轨迹track.append(round(move))return trackdef move_to_gap(self, slider, track):"""拖动滑块到缺口处:param slider: 滑块:param track: 轨迹:return:"""ActionChains(self.browser).click_and_hold(slider).perform()for x in track:ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()time.sleep(0.5)ActionChains(self.browser).release().perform()@staticmethoddef get_gap():"""通过超级鹰获取缺口位置:return: 缺口距离"""# todo:用户中心>>软件ID 生成一个替换 96001chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID')# todo:  本地图片文件路径 来替换 a.jpg 有时WIN系统须要//im = open('target.png', 'rb').read()    # todo:  9101 验证码类型, 滑动验证码就不需要更改                                             result = chaojiying.PostPic(im, 9101)gap = int(result.get("pic_str").split(",")[0])return gap# 超级赢验证失败,反馈回去,将不扣钱@staticmethoddef fail_to_chaojiying():"""超级赢验证失败,反馈回去,将不扣钱:return: None"""# todo:用户中心>>软件ID 生成一个替换 96001chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID')# todo:  本地图片文件路径 来替换 a.jpg 有时WIN系统须要//im = open('target.png', 'rb').read()result = chaojiying.ReportError(im)@staticmethoddef add_text_to_image():"""给截取的带缺口的图片添加“请点击凹槽左上角":return: None"""# 设置字体样式font = ImageFont.truetype("/usr/share/fonts/蓝杰ios加粗.ttf", 32)# 打开底版图片imageFile = "captcha.png"im1 = Image.open(imageFile)# 在图片上添加文字 "请点击凹槽左上角"add_text = "请点击凹槽左上角"draw = ImageDraw.Draw(im1)draw.text((2, 120), add_text, "#FF0000", font=font)# 保存im1.save("target.png")def crack(self):# 输入用户名密码self.open()# 点击验证按钮time.sleep(1)button = self.get_geetest_button()button.click()# BOREDER有俩种情况,一种是8,一种是15, 还有一种是28def slider_try(gap, BORDER):if self.now_num:# 减去缺口位置gap -= BORDER# 计算滑动距离track = self.get_track(int(gap))# 拖动滑块slider = self.get_slider()self.move_to_gap(slider, track)try:self.success = self.wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME, 'geetest_success_radar_tip_content'), '验证成功'))except Exception as e:self.now_num -= 1test_num = self.try_num - self.now_numif self.now_num == 0:print("第%d次尝试失败, 验证失败" % test_num)else:print("验证失败,正在进行第%d次尝试" % test_num)while not self.success and self.now_num > 0:# 获取验证码图片try:self.get_geetest_image()except Exception as e:# todo: 其他验证,或者是自动识别通过self.success = Trueprint("自动识别通过或者验证非滑动验证码,无需滑动%s" % e)time.sleep(5)return# 给验证码加文字self.add_text_to_image()# 获取缺口位置gap = self.get_gap()print("缺口位置gap为",gap)# 第一中请求,gap减少7slider_try(gap, BORDER_1)# 成功后退出if not self.success:# 尝试gap减少14slider_try(gap, BORDER_2)if not self.success:slider_try(gap, BORDER_3)self.fail_to_chaojiying()if self.success:test_num = self.try_num - self.now_num + 1print("第{}次刷新,第{}次尝试,验证通过".format(self.flesh_num, test_num))time.sleep(5)self.success = Trueif not self.success:print("重新刷新页面,这是第%d次刷新" % self.flesh_num)self.flesh_num += 1self.now_num = 3self.try_num = 3self.crack()if __name__ == '__main__':crack = CrackGeetest()crack.crack()del crack
测试数据:
次数 验证何时通过(每次刷新尝试最多3次机会)
1 第1次刷新,第1次尝试,验证通过
2 第2次刷新,第3次尝试,验证通过
3 第1次刷新,第2次尝试,验证通过
4 第1次刷新,第1次尝试,验证通过
5 第8次刷新,第1次尝试,验证通过过
6 第1次刷新,第3次尝试,验证通过

该验证的通过率,取决于超级鹰平台的返回的坐标,不过从结果可以看出来,基本都是要识别好几次,才可以成功,这个算法有点不行,可以通过celery异步让他处理,结果会更好,如果有机会,还不如自己写个识别图片凹槽的算法,感觉不会特别难

验证码破解:极验3.0滑动验证码破解最新俩种方法相关推荐

  1. 极验验证的滑动验证码破解

    最近在搞爬虫的时候在好几个网站都碰到了一种叫做geetest的滑动条验证码,一直没有太好的办法只能在触发这个验证码后发个报警去手动处理一下.http://www.geetest.com/exp_emb ...

  2. pyppeteer 极验(斗鱼直播 )滑动验证码【思路】

    思路代码 注释的代码:使用page.frames 不知道怎么注入JS获取滑块验证图,所以注释 6.选择器用于选择鼠标指针浮动在上面的元素: 多次踩坑,如果没有这句,滑块就不能移动 @except_ou ...

  3. Day06,selenium的剩余用法、万能登录破解和爬取京东商品信息,及破解极验滑动验证码...

    一.自动登录抽屉新热榜 from selenium import webdriver import timedriver = webdriver.Chrome(r'D:\BaiduNetdiskDow ...

  4. 如何破解极验滑动验证码?成功率 100%!

    注:已对文章中所涉及的敏感内容,如图片/文字/URL 进行脱敏处理. 什么是"极验"? 或许你没听说过极验[1],但你很大可能使用过极验的产品.极验是首家「行为式验证」安全技术服务 ...

  5. 破解 geetest(极验)的滑块验证码

    转载自python3 破解 geetest(极验)的滑块验证码 from selenium import webdriver from selenium.webdriver.support.ui im ...

  6. python3 破解 geetest(极验)的滑块验证码

    转:https://www.cnblogs.com/shiluoliming/p/7611569.html Kernel_wu 快速学习的实践者 python3 破解 geetest(极验)的滑块验证 ...

  7. 爬虫入门经典(十九) | 难度提升,破解极验验证码

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  8. 【JavaScript 逆向】极验三代无感验证码逆向分析

    相关文章 [JavaScript 逆向]极验三代滑块验证码逆向分析 [JavaScript 逆向]极验四代无感验证码逆向分析 [JavaScript 逆向]极验四代滑块验证码逆向分析 声明 本文章中所 ...

  9. 使用OpenCV 破解QQ登录中的滑动验证码

    系列文章目录 第一篇: Java实现QQ登录 第二篇: Selenium QQ自动化登录 第三篇: 使用OpenCV 破解QQ登录中的滑动验证码 文章目录 系列文章目录 文章目录 前言 一.登录流程 ...

最新文章

  1. spring-aop-01
  2. java发布sevlet_发布一个java Servlet (静态发布)
  3. Web UI回归测试 -- BackstopJS 入门
  4. ANSYS——自定义的梁截面中心(法线节点)的偏置,详细全面
  5. 裁判打分_内在的裁判偏见
  6. 在Angular中添加第三方库jQuery、bootstrap
  7. 写给自己,关于对纯技术的追求,以及为了金钱与前途的技术追求
  8. PHP学习笔记:利用gd库给图片打图片水印
  9. 利用ichart绘制网页图表
  10. ns3网络设置模块 PointToPoint
  11. 【毕业设计】基于情感分析的网络舆情热点评估系统 - 大数据 python可视化 数据分析
  12. b站学python哪个好学_B站上那个不用钱的学习python的资源
  13. oracle把中文转换成ascii,js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换XX函数代码...
  14. [游戏程序] 经典游戏服务器端架构概述
  15. hiberfil.sys文件删除
  16. 数据化建设知识图谱(文末附PDF下载)
  17. 分列:将excel单元格的内容拆分为两列
  18. Ubuntu 22.04 桌面美化之Mac Big Sur风格
  19. 从简易计算器到设计模式(策略、简单工厂)
  20. C语言计算一个整数的位数

热门文章

  1. 阿里大鱼短信发送接口开发
  2. (转)什么时候要抛出异常?
  3. 复杂指令集与精简指令集的原子操作
  4. WEB前端开发 解决IE6、IE7、IE8样式不兼容问题
  5. 遗传算法的特性以及在具体算法应用中的应用
  6. 33个与众不同的Web表单设计
  7. 【智能医疗】人工智能通过模拟疾病进程可预测老年痴呆
  8. 保研论坛app服务器网站,保研通论坛 - 中国最大的保研交流社区
  9. C语言基础 阶乘:输入一个数,输出它的阶乘。
  10. 国内外物联网和AI平台