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

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

【原創(chuàng)】Python 極驗滑塊驗證

2022-05-09 15:14 作者:拉燈的小手  | 我要投稿

?本文僅供學習交流使用,如侵立刪!

記一次 極驗滑塊驗證分析并通過

操作環(huán)境

  • win10 、 mac

  • Python3.9

  • selenium、seleniumwire

分析

最近在做的一個項目登錄時會觸發(fā)一個滑塊驗證,就長下面這個樣子

可以很明顯的看出來是極驗3代驗證,借助之前寫阿里云盾的經(jīng)驗使用selenium+pyautoui先測試一下,詳細可參考:阿里云盾滑塊驗證

直接提示被怪物吃掉了!??! 還是先來研究一下官方文檔看一下驗證的業(yè)務邏輯:極驗驗證接入文檔

本以為是檢測到了selenium,手動測試了一下發(fā)現(xiàn)是可以滑過的,那就是說明應該是滑動的軌跡觸發(fā)了風控。

分析了一波效驗規(guī)則及原理,搞明白原理就好辦了

解決方案

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

def open(self):
? """
? ?登錄模塊
? ?"""
? ?# 定位密碼登錄
? ?self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[1]/div[2]').click()
? ?# 輸入賬號
? ?username = '123456'
? ?self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[1]/form/div[1]/div/div/input').send_keys(username)
? ?time.sleep(1)
? ?# 輸入密碼
? ?password = '123456789'
? ?self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[1]/form/div[2]/div/div/input').send_keys(password)
? ?time.sleep(1)
? ?# 登錄
? ?self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[3]/button').click()

獲取驗證圖片并計算滑塊距離

def get_images(self):
? """
? 獲取驗證碼圖片
? :return: 圖片的location信息
? """
? # 帶缺口圖片,使用js定位并讀取圖片的data信息 data:image/png;base64,直接調(diào)用識別缺口
? fullgb = self.driver.execute_script('return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png")')
? # 完整圖片,使用js定位并讀取圖片的data信息 data:image/png;base64,直接調(diào)用識別缺口
? bg = self.driver.execute_script('return document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].toDataURL("image/png")')
? return bg, fullgb

def get_decode_image(self, location_list):
? """
? 解碼圖片的base64數(shù)據(jù)
? """
? # 提取圖片base64數(shù)據(jù)
? _, img = location_list.split(",")
? # 數(shù)據(jù)轉(zhuǎn)換為Bytes字節(jié)
? img = base64.decodebytes(img.encode())
? # 讀取圖片
? new_im: PngImagePlugin.PngImageFile = image.open(BytesIO(img))
? # new_im.convert("RGB")
? # new_im.save(filename)
? return new_im

def compute_gap(self, img1, img2):
? """
? 計算缺口偏移 這種方式成功率很高
? """
? # 將圖片修改為RGB模式
? img1 = img1.convert("RGB")
? img2 = img2.convert("RGB")
? # 計算差值
? diff = ImageChops.difference(img1, img2)
? # 灰度圖
? diff = diff.convert("L")
? # 二值化
? diff = diff.point(self.table, '1')
? left = 43
? for w in range(left, diff.size[0]):
? ? ? lis = []
? ? ? for h in range(diff.size[1]):
? ? ? ? ? if diff.load()[w, h] == 1:
? ? ? ? ? ? ? lis.append(w)
? ? ? ? ? if len(lis) > 5:
? ? ? ? ? ? ? return w

生成滑動軌跡

def get_tracks(self, distance, seconds, ease_func):
? ?"""
? ?:param distance: 缺口位置
? ?:param seconds: ?時間
? ?:param ease_func: 生成函數(shù)
? ?:return: 軌跡數(shù)組
? ?"""
? ?tracks = [0]
? ?offsets = [0]
? ?for t in np.arange(0.0, seconds, 0.1):
? ? ? ?ease = ease_func
? ? ? ?offset = round(ease(t / seconds) * distance)
? ? ? ?tracks.append(offset - offsets[-1])
? ? ? ?offsets.append(offset)
? ?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/85328666

本文僅供學習交流使用,如侵立刪!


【原創(chuàng)】Python 極驗滑塊驗證的評論 (共 條)

分享到微博請遵守國家法律
永安市| 凌云县| 扬中市| 剑川县| 聂拉木县| 保定市| 尖扎县| 淳化县| 丰原市| 金湖县| 庐江县| 东港市| 玉溪市| 思南县| 外汇| 吉安县| 牟定县| 双辽市| 永吉县| 友谊县| 根河市| 三台县| 廉江市| 益阳市| 沈阳市| 正阳县| 定州市| 马边| 岳阳县| 仁寿县| 江西省| 长宁区| 晋州市| 历史| 汝城县| 紫阳县| 象州县| 青海省| 安泽县| 金山区| 台山市|