Python 网易易盾滑块验证功能的实现

 更新时间:2022年05月11日 08:30:32   作者:拉灯的小手  
这篇文章主要介绍了Python 网易易盾滑块验证,主要是借助之前写阿里云盾滑块和极验滑块的经验写的本文,通过使用selenium请求url,并触发滑块验证,需要的朋友可以参考下

记一次 网易易盾滑块验证分析并通过

操作环境

  • win10 、 mac
  • Python3.9
  • selenium、PIL、numpy、scipy、matplotlib

分析

网易易盾滑块验证,就长下面这个样子

具体验证原理有兴趣的可自行查询官方文档:网易易盾开发文档

话不多少,借助之前写阿里云盾滑块和极验滑块的经验,直接上代码,详细可参考:[python3 破解 geetest(极验)的滑块验证码功能]极验滑块验证

解决方案

使用selenium请求url,并触发滑块验证

def open(self):
    # 初始化浏览器
    wait = WebDriverWait(self.driver, 5)
     # 点击对应标签
     self.driver.get(cfg.TEST_URL)
     button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, cfg.HD_SELECOTR)))
     button.click()
     self.tc_item = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, cfg.TC_SELECOTR)))
     self.tc_item.click()

     # 得到背景和滑块的item, 以及滑动按钮
     time.sleep(2)
     self.background_item = wait.until(
         EC.presence_of_element_located((By.CSS_SELECTOR, cfg.BG_SELECOTR))
     )
     self.slider_item = wait.until(
         EC.presence_of_element_located((By.CSS_SELECTOR, cfg.HK_SELECOTR))
     )
     self.slider_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, cfg.HD_BTN)))
     self.offset = cfg.offset
     self.background_path = cfg.background_path
     self.slider_path = cfg.slider_path

获取验证图片并计算滑块距离

def get_images(self):
   """
   获取验证码图片
   :return: 图片的location信息
   """
    url = selenium_item.get_attribute("src")
    if url is not None:
        response = requests.get(url)
        with open(path, "wb") as f:
            f.write(response.content)
        img = Image.open(path).resize(size)
        img.save(path)
    else:
        class_name = selenium_item.get_attribute("class")
        js_cmd = (
            'return document.getElementsByClassName("%s")[0].toDataURL("image/png");'
            % class_name
        )
        im_info = self.driver.execute_script(js_cmd)
        im_base64 = im_info.split(",")[1] 
        im_bytes = base64.b64decode(im_base64)
        with open(path, "wb") as f:
            f.write(im_bytes)
        img = Image.open(path).resize(size)
        img.save(path)

def compute_gap(self, array):
   """
   计算缺口偏移
   """
   grad = np.array(array > 0)
    h, w = grad.shape
    # img_show(grad)
    rows_sum = np.sum(grad, axis=1)
    cols_sum = np.sum(grad, axis=0)
    left, top, bottom = 0, 0, h
    # get the top index
    p = np.max(rows_sum) * 0.5
    for i in range(h):
        if rows_sum[i] > p:
            top = i
            break
    for i in range(h - 1, -1, -1):
        if rows_sum[i] > p:
            bottom = i
            break
    p = np.max(cols_sum) * 0.5
    for i in range(w):
        if cols_sum[i] > p:
            left = i
            break
    return top, bottom + 1, left

生成滑动轨迹

def get_tracks(distance):
    v = random.randint(0, 2)
    t = 1
    tracks = []
    cur = 0
    mid = distance * 0.8
    while cur < distance:
        if cur < mid:
            a = random.randint(2, 4)
        else:
            a = -random.randint(3, 5)
        s = v * t + 0.5 * a * t ** 2
        cur += s
        v = v + a * t
        tracks.append(round(s))
    tracks.append(distance - sum(tracks))
    return tracks

滑动模块

def move_to_gap(self, track):
     """滑动滑块"""
     print('第一步,点击滑动按钮')
     slider = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_slider_button')))
     ActionChains(self.driver).click_and_hold(slider).perform()
     time.sleep(1)
     print('第二步,拖动元素')
     for track in track:
         ActionChains(self.driver).move_by_offset(xoffset=track, yoffset=0).perform()  # 鼠标移动到距离当前位置(x,y)
         time.sleep(0.0001)

效果

资源下载

https://download.csdn.net/download/qq_38154948/85343666

到此这篇关于Python 网易易盾滑块验证功能的实现的文章就介绍到这了,更多相关Python 易盾滑块验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas返回缺失值位置的方法实例教程

    pandas返回缺失值位置的方法实例教程

    当我们用python进行数据处理时会遇到很多缺失值,缺失值一般是由于我们所处理的数据本身的特性、当初录入的失误或者其它原因导致的,下面这篇文章主要给大家介绍了关于pandas返回缺失值位置的方法,需要的朋友可以参考下
    2022-01-01
  • pandas中Series的代码实例解析

    pandas中Series的代码实例解析

    这篇文章主要介绍了pandas中Series的代码实例解析,Series序列,是一种一维的结构,类似于一维列表和ndarray中的一维数组,但是功能比他们要更为强大,Series由两部分组成:索引index和数值values,需要的朋友可以参考下
    2023-07-07
  • 一文带你理解Python中面向对象编程OOP的概念

    一文带你理解Python中面向对象编程OOP的概念

    在Python中,面向对象编程(OOP)是一种在编程中使用对象和类的编程范式,它旨在实现现实世界的实体,下面我们就一起来看看它的相关知识吧
    2023-08-08
  • python实现三壶谜题的示例详解

    python实现三壶谜题的示例详解

    这篇文章主要介绍了python实现三壶谜题功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 关于sklearn包导入错误:ImportError: cannot import name Type解决方案

    关于sklearn包导入错误:ImportError: cannot import name Type解

    这篇文章主要介绍了关于sklearn包导入错误:ImportError: cannot import name‘Type‘解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python优化列表接口进行分页示例实现

    Python优化列表接口进行分页示例实现

    最近,在做测试开发平台的时候,需要对测试用例的列表进行后端分页,在实际去写代码和测试的过程中,发现这里面还是有些细节的,故想复盘一下
    2021-09-09
  • OpenCV实现相机校正

    OpenCV实现相机校正

    这篇文章主要为大家详细介绍了OpenCV实现相机校正,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Python操作数据库之数据库编程接口

    Python操作数据库之数据库编程接口

    这篇文章主要介绍了Python操作数据库之数据库编程接口,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • python 获取计算机的网卡信息

    python 获取计算机的网卡信息

    这篇文章主要介绍了python 获取计算机的网卡信息的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2021-02-02
  • python实现贪吃蛇小游戏

    python实现贪吃蛇小游戏

    这篇文章主要为大家详细介绍了python实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论