破解极验(geetest)滑动验证码

作者: GHope | 来源:发表于2018-11-07 11:40 被阅读5次

极验

目前大多数网站使用的验证方式,极验验证码主要分为点按、滑动、选字、选图、识字组词等方式。如下图所示:

点按 滑动 选字 选图 识字组词

当然这只是几种比较常见的验证码方式,还有旋转图片、找出一组图片中不是同一个人之类的,五花八门。。。

在这里只是简单讲解一下如何使用selenium破解极验的滑动验证码。

破解思路

  1. 找到验证码的图片
  2. 对比bg和fullbg两张图片,找到缺口位置
  3. 用selenium模拟人的行为拖动滑块
  4. 验证结果

具体步骤

在此之前先讲一下最新版极验出的验证方法是没有原始图片的。也就是多了一个修改页面css样式的属性操作,还够不到机器学习、OCR识别一些看起来比较高深的东西。再说了,貌似那个识别率也不是很高。

a > 点击验证按钮

获取按钮

button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.gt_slider_knob.gt_show')))

点按按钮(就是把鼠标放到按钮上,并非点击,否则后直接导致破解失败)

ActionChains(self.browser).move_to_element(button).perform()

ActionChains方法:
move_to_element(to_element) - 鼠标移动到某个元素
click_and_hold(on_element =None) - 点击鼠标左键,不松开
move_by_offset(xoffset,yoffset) - 鼠标从当前位置移动到某个坐标
release(on_element = None) - 在某个元素位置松开鼠标左键
perform() - 执行操作,记住这个很重要,调用上面的方法后,一定要执行perform才能真正执行

b >获取验证码截图(因为极验的那个图片是有很多个小图片组合到一起的,看网上有很多的组合方式。。。个人感觉直接截图之后定位要好一些,简单粗暴直接。PS:使用极验最新版的不通过点击获取验证码图片,而是通过修改页面css属性直接拿到验证码图片。当然,个人还是推荐截图,而非破解规律重组)

1)获取整个页面的截图

screenshot = browser.get_screenshot_as_png()
screenshot = Image.open(BytesIO(screenshot))

2)获取验证码坐标(基于整个页面的截图)

        img = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.gt_cut_fullbg.gt_show')))
        time.sleep(2)
        location = img.location
        size = img.size
        top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']

3)获取验证码图片(根据坐标在整个页面截图上在截图)

        top, bottom, left, right = self.get_position()
        screenshot = self.get_screenshot()
        captcha = screenshot.crop((left, top, right, bottom))
获取验证码图片

c>获取带缺口的验证码图片

1)获取滑块对象

slider = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.gt_slider_knob.gt_show')))

2)截取带缺口的验证码图片(点按滑块对象,唤出带缺口的验证码图片。使用截验证码图片的同样的方式在进行一次截取即可:截取整个页面 -- 获取坐标 -- 截取。)


获取带缺口的验证码图片

d>获取缺口位置

gap = self.get_gap(image1, image2)

e>减去缺口位移(BORDER是自己设置的常量,表示下图红色标识的部分的宽)

BORDER
        gap -= BORDER

f>模拟移动轨迹(应该算是极简模拟了,网上有人说要用神经网络我就。。。不过可以试一下线性回归,当然还有人说录制人滑的轨迹再回放什么的,也可以算是一种思路吧!最起码感觉比神经网络要简单)

回归思路:
回归算法的缺点大家都知道,是需要严格的假设的,做这个之前先抽取几组数据做 时间-位移的折图,发现速度轨迹其实是先快,接近目标点后开始慢的。之后博主取个巧把函数近似看成两个一元一次函数的组合,分别作回归。至于怎么分的函数,很简单,对每组数据点的 速度 做一个聚类。

# 移动轨迹
        track = []
        # 当前位移
        current = 0
        # 减速阈值
        mid = distance * 4 / 5
        # 计算间隔
        t = 0.2
        # 初速度
        v = 0
        while current < distance:
            if current < mid:
                # 加速度为正2
                a = 2
            else:
                # 加速度为负3
                a = -3
            # 初速度v0
            v0 = v
            # 当前速度v = v0 + at
            v = v0 + a * t
            # 移动距离x = v0t + 1/2 * a * t^2
            move = v0 * t + 1 / 2 * a * t * t
            # 当前位移
            current += move
            # 加入轨迹
            track.append(round(move))

g>拖动滑块

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()

若无出错,此时就已经验证成功了。成功率还是比较低,问题主要还是出在模拟轨迹那一块上,需要改进该算法会提高验证率。

极验的三种破解方式:
上述selenium是一种
非selenium破解方式参考
第三方平台(付费)

相关文章

  • 破解极验(geetest)滑动验证码

    极验 目前大多数网站使用的验证方式,极验验证码主要分为点按、滑动、选字、选图、识字组词等方式。如下图所示: 当然这...

  • 极验验证码破解—超详细教程(二)

    极验验证码破解—超详细教程(一) 极验验证码破解—超详细教程(二) 极验验证码破解—超详细教程(三) Gayhub...

  • 极验验证码破解—超详细教程(三)

    极验验证码破解—超详细教程(一) 极验验证码破解—超详细教程(二) 极验验证码破解—超详细教程(三) Gayhub...

  • 极验验证码破解—超详细教程(一)

    [国家企业信用信息公示系统为例] 极验验证码破解—超详细教程(一) 极验验证码破解—超详细教程(二) 极验验证码破...

  • ThinkPHP使用极验验证

    1、极验验证官网http://www.geetest.com/,与以往传统验证码不同的是,极验通过分析用户完成拼图...

  • 破解滑动验证码

    最近爬虫采集数据遇到了验证码的障碍,需要破解某网站的滑动验证码(GEETEST)。 主要参考https://seg...

  • 2018-04-17持续集成 未实践

    阮一峰 持续集成 百度 CI JenKins 自动部署 puppeteer 破解 geetest 滑动验证码 ko...

  • 极验(geetest)验证码

    刚刚登录简书的时候发现,那个验证码廷高大上的。就想看看怎么弄的,就先跑个测试用例吧。具体的我还没怎么看,我是百度的...

  • Python破解极验滑动验证码

    极验滑动验证码 现在极验验证码广泛应用于直播视频、金融服务、电子商务、游戏娱乐、政府企业等各大类型网站 对于这类验...

  • 反滑块验证

    简介 滑动验证码: 滑动验证码也可以叫做行为验证,其中最出名的就是极验。 作者:Simon0903 链接:http...

网友评论

    本文标题:破解极验(geetest)滑动验证码

    本文链接:https://www.haomeiwen.com/subject/pmoltqtx.html