[原创]【原创】Python 网易易盾滑块验证 您所在的位置:网站首页 阿里云盾滑块226在线体验 [原创]【原创】Python 网易易盾滑块验证

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

2024-07-10 02:39| 来源: 网络整理| 查看: 265

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

记一次 网易易盾滑块验证分析并通过操作环境 win10 、 mac Python3.9 selenium、PIL、numpy、scipy、matplotlib 分析

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

 

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

解决方案使用selenium请求url,并触发滑块验证1234567891011121314151617181920212223def 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 获取验证图片并计算滑块距离12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152def 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 生成滑动轨迹1234567891011121314151617def 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 滑动模块12345678910def 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

 

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

#开发技巧 #工具脚本 #其他


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有