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

話不多少,借助之前寫阿里云盾滑塊和極驗滑塊的經(jīng)驗,直接上代碼,詳細可參考:[python3 破解 geetest(極驗)的滑塊驗證碼功能]極驗滑塊驗證
解決方案
使用selenium請求url,并觸發(fā)滑塊驗證
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)效果

資源下載
https://download.csdn.net/download/qq_38154948/85343666
到此這篇關于Python 網(wǎng)易易盾滑塊驗證功能的實現(xiàn)的文章就介紹到這了,更多相關Python 易盾滑塊驗證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于sklearn實現(xiàn)Bagging算法(python)
這篇文章主要為大家詳細介紹了基于sklearn實現(xiàn)Bagging算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
flask的orm框架SQLAlchemy查詢實現(xiàn)解析
這篇文章主要介紹了flask的orm框架SQLAlchemy查詢實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
基于Python的微信機器人開發(fā) 微信登錄和獲取好友列表實現(xiàn)解析
這篇文章主要介紹了Python微信機器人開發(fā) 微信登錄和獲取好友列表實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08

