【原创】Python 网易易盾滑块验证

简介: 【原创】Python 网易易盾滑块验证



本文仅供学习交流使用,如侵立删!

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

操作环境

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

分析

网易易盾滑块验证,就长下面这个样子具体验证原理有兴趣的可自行查询官方文档:网易易盾开发文档

话不多少,借助之前写阿里云盾滑块和极验滑块的经验,直接上代码,详细可参考:阿里云盾滑块验证(https://cenjy.blog.csdn.net/article/details/124664094)(https://cenjy.blog.csdn.net/article/details/124357598)

解决方案

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

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

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

defget_images(self):

  """

  获取验证码图片

  :return: 图片的location信息

  """

   url = selenium_item.get_attribute("src")

   ifurlisnotNone:

       response = requests.get(url)

       withopen(path, "wb") asf:

           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)

       withopen(path, "wb") asf:

           f.write(im_bytes)

       img = Image.open(path).resize(size)

       img.save(path)

defcompute_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

   foriinrange(h):

       ifrows_sum[i] >p:

           top = i

           break

   foriinrange(h-1, -1, -1):

       ifrows_sum[i] >p:

           bottom = i

           break

   p = np.max(cols_sum) *0.5

   foriinrange(w):

       ifcols_sum[i] >p:

           left = i

           break

   returntop, bottom+1, left

生成滑动轨迹

defget_tracks(distance):

   v = random.randint(0, 2)

   t = 1

   tracks = []

   cur = 0

   mid = distance*0.8

   whilecur<distance:

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

   returntracks

滑动模块

defmove_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('第二步,拖动元素')

    fortrackintrack:

        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


本文仅供学习交流使用,如侵立删!
相关文章
|
4月前
|
网络协议 网络安全 数据库
python验证公网ip与内网ip
python验证公网ip与内网ip
59 0
|
4月前
|
存储 安全 网络协议
Python 教程之 Django(9)对模型中的字段进行验证
Python 教程之 Django(9)对模型中的字段进行验证
45 0
Python 教程之 Django(9)对模型中的字段进行验证
使用python将数据集划分为训练集、验证集和测试集
使用python将数据集划分为训练集、验证集和测试集
|
25天前
|
算法 Ubuntu 机器人
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
36 1
|
1月前
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
20 6
|
4月前
|
存储 Java C#
使用Python实现简易的用户登录验证功能
这篇文章将向你展示如何使用Python语言进行程序设计,实现一个简易的用户登录验证功能。 该功能允许用户输入由字母和数字任意组合而成的用户名和密码,并通过while循环不断地提示用户输入,直到凭证正确为止。所有凭证信息将被存储在一个字典中,以便进行匹配验证。
|
3月前
|
存储 算法 数据可视化
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
|
3月前
|
存储 算法 Java
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
16 0
|
3月前
|
数据安全/隐私保护 Python
【Python 训练营】N_1 验证密码
【Python 训练营】N_1 验证密码
19 0
|
4月前
|
API 网络架构 Python
python验证公网ip与内网ip
python验证公网ip与内网ip
下一篇
DDNS