Python?網(wǎng)易易盾滑塊驗(yàn)證功能的實(shí)現(xiàn)
記一次 網(wǎng)易易盾滑塊驗(yàn)證分析并通過(guò)
操作環(huán)境
- win10 、 mac
- Python3.9
- selenium、PIL、numpy、scipy、matplotlib
分析
網(wǎng)易易盾滑塊驗(yàn)證,就長(zhǎng)下面這個(gè)樣子
具體驗(yàn)證原理有興趣的可自行查詢官方文檔:網(wǎng)易易盾開(kāi)發(fā)文檔

話不多少,借助之前寫阿里云盾滑塊和極驗(yàn)滑塊的經(jīng)驗(yàn),直接上代碼,詳細(xì)可參考:[python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能]極驗(yàn)滑塊驗(yàn)證
解決方案
使用selenium請(qǐng)求url,并觸發(fā)滑塊驗(yàn)證
def open(self):
# 初始化瀏覽器
wait = WebDriverWait(self.driver, 5)
# 點(diǎn)擊對(duì)應(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, 以及滑動(dòng)按鈕
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生成滑動(dòng)軌跡
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滑動(dòng)模塊
def move_to_gap(self, track):
"""滑動(dòng)滑塊"""
print('第一步,點(diǎn)擊滑動(dòng)按鈕')
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('第二步,拖動(dòng)元素')
for track in track:
ActionChains(self.driver).move_by_offset(xoffset=track, yoffset=0).perform() # 鼠標(biāo)移動(dòng)到距離當(dāng)前位置(x,y)
time.sleep(0.0001)效果

資源下載
https://download.csdn.net/download/qq_38154948/85343666
到此這篇關(guān)于Python 網(wǎng)易易盾滑塊驗(yàn)證功能的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 易盾滑塊驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)代碼統(tǒng)計(jì)器
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)代碼統(tǒng)計(jì)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Python3.5裝飾器原理及應(yīng)用實(shí)例詳解
這篇文章主要介紹了Python3.5裝飾器原理及應(yīng)用,結(jié)合具體實(shí)例形式詳細(xì)分析了Python3.5裝飾器的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-04-04
基于sklearn實(shí)現(xiàn)Bagging算法(python)
這篇文章主要為大家詳細(xì)介紹了基于sklearn實(shí)現(xiàn)Bagging算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
flask的orm框架SQLAlchemy查詢實(shí)現(xiàn)解析
這篇文章主要介紹了flask的orm框架SQLAlchemy查詢實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
基于Python的微信機(jī)器人開(kāi)發(fā) 微信登錄和獲取好友列表實(shí)現(xiàn)解析
這篇文章主要介紹了Python微信機(jī)器人開(kāi)發(fā) 微信登錄和獲取好友列表實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

