python教程分享Python 网易易盾滑块验证功能的实现

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

操作环境

  • win10 、 mac
  • python3.9
  • selenium、pil、numpy、scipy、matplotlib

分析

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

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

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

话不多少,借助之前写阿里云盾滑块和极验滑块的经验,直接上代码,详细可参考:[]

解决方案

使用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)

效果

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

资源下载

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

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

需要了解更多python教程分享Python 网易易盾滑块验证功能的实现,都可以关注python教程分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/pythons/1092012.html

(0)
上一篇 3天前
下一篇 3天前

精彩推荐

发表评论

您的电子邮箱地址不会被公开。