最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【原創(chuàng)】Python 網(wǎng)易易盾滑塊驗(yàn)證

2022-05-11 02:25 作者:拉燈的小手  | 我要投稿

?本文僅供學(xué)習(xí)交流使用,如侵立刪!

記一次 網(wǎng)易易盾滑塊驗(yàn)證分析并通過

操作環(huán)境

  • win10 、 mac

  • Python3.9

  • selenium、PIL、numpy、scipy、matplotlib

分析

網(wǎng)易易盾滑塊驗(yàn)證,就長下面這個樣子

具體驗(yàn)證原理有興趣的可自行查詢官方文檔:網(wǎng)易易盾開發(fā)文檔

話不多少,借助之前寫阿里云盾滑塊和極驗(yàn)滑塊的經(jīng)驗(yàn),直接上代碼,詳細(xì)可參考:阿里云盾滑塊驗(yàn)證(https://cenjy.blog.csdn.net/article/details/124664094)(https://cenjy.blog.csdn.net/article/details/124357598)

解決方案

使用selenium請求url,并觸發(fā)滑塊驗(yàn)證

def open(self):
? ?# 初始化瀏覽器
? ?wait = WebDriverWait(self.driver, 5)
? ? # 點(diǎn)擊對應(yīng)標(biāo)簽
? ? 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

獲取驗(yàn)證圖片并計(jì)算滑塊距離

def get_images(self):
? """
? 獲取驗(yàn)證碼圖片
? :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):
? """
? 計(jì)算缺口偏移
? """
? 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('第一步,點(diǎn)擊滑動按鈕')
? ? 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() ?# 鼠標(biāo)移動到距離當(dāng)前位置(x,y)
? ? ? ? time.sleep(0.0001)

效果

資源下載

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

本文僅供學(xué)習(xí)交流使用,如侵立刪!


【原創(chuàng)】Python 網(wǎng)易易盾滑塊驗(yàn)證的評論 (共 條)

分享到微博請遵守國家法律
土默特左旗| 旬邑县| 神木县| 岢岚县| 北宁市| 永平县| 西充县| 凤庆县| 博湖县| 黔西县| 调兵山市| 昌图县| 罗城| 林口县| 浦城县| 抚顺市| 江城| 大渡口区| 山东| 伊川县| 光山县| 固始县| 龙里县| 攀枝花市| 积石山| 山阳县| 渑池县| 临湘市| 嵊州市| 肇东市| 类乌齐县| 城步| 大新县| 漳州市| 任丘市| 贡山| 巩义市| 湖口县| 中阳县| 达日县| 遂溪县|