【自動化測試】繞過登錄模塊的騰訊云滑塊驗證碼

篇幅較長,請大家耐心看完,建議收藏慢慢看,另外文末給大家準備了福利(好幾套面試題加學習資料等),需要自?。?/b>

做自動化 UI 測試時,遇到登錄有驗證碼校驗無法繞過時,可以使用下面的方法。

就是登錄模塊的這種騰訊云滑塊驗證碼。

發(fā)現(xiàn)有缺口的圖片和沒有缺口的圖片,url 里的 img_index 參數(shù)不同。(一個 img_index=1,一個 img_index=0)

所以用 PIL 庫,對比 驗證碼圖片 有缺口和無缺口的不同,計算出偏移量,模擬滑塊滑動。

import random

import io

from PIL import Image

from urllib.request import urlopen

from selenium.webdriver.common.action_chains import ActionChains

import time

# 打開圖片鏈接

def open_img_url(src):

? ? img_url = urlopen(src, timeout=2).read()

? ? img = Image.open(io.BytesIO(img_url))

? ? # 恢復原始大小

? ? img_resize = (int(i // 2) for i in img.size)

? ? return img.resize(img_resize, Image.ANTIALIAS)

def get_img(dr):

? ? dr.switch_to.frame('tcaptcha_iframe')

? ? src1 = dr.find_element_by_id('slideBg').get_attribute('src')

? ? src2 = src1.replace('img_index=1', 'img_index=0')

? ? return open_img_url(src1), open_img_url(src2)

# 比較兩張圖片同一點上的像數(shù)值,差距大于設(shè)置標準返回False

def is_pixel(img1, img2, x, y):

? ? i = 100

? ? px1, px2 = img1.load()[x, y], img2.load()[x, y]

? ? r, g, b = [abs(p1 - p2) for p1, p2 in zip(px1, px2)]

? ? return True if r < i and g < i and b < i else False

# 獲取缺口的偏移量,兩張圖片對比,(i,j)像素點的RGB差距,過大則該x為偏移值

def get_offset(img1, img2):

? ? offset, distance = None, 70

? ? x, y = img1.size

? ? for i in range(distance, x):

? ? ? ? for j in range(y):

? ? ? ? ? ? if not is_pixel(img1, img2, i, j):

? ? ? ? ? ? ? ? offset = i

? ? ? ? ? ? ? ? return offset

? ? return offset

# 計算滑塊的移動軌跡 滑塊并不是從0開始移動,有一個初始值

def get_track(offset):

? ? offset -= 30

? ? return [offset / 4] * 4

# 模擬釋放鼠標抖動

def shake(dr):

? ? ActionChains(dr).move_by_offset(xoffset=-2, yoffset=0).perform()

? ? ActionChains(dr).move_by_offset(xoffset=2, yoffset=0).perform()

? ? time.sleep(random.random())

# 按軌跡移動

def move(dr, track):

? ? for i in track:

? ? ? ? ActionChains(dr).move_by_offset(xoffset=i, yoffset=0).perform()

? ? ? ? time.sleep(random.random() / 100)

? ? time.sleep(random.random())

# 完成拖動操作

def slider_btn(dr, track):

? ? btn = dr.find_element_by_id('tcaptcha_drag_thumb')

? ? ActionChains(dr).click_and_hold(btn).perform()? # 按住按鈕不放

? ? move(dr, track)? # 按正向軌跡移動

? ? move(dr, [-1, -0.5, -1])? # 按逆向軌跡移動

? ? shake(dr)? # 模擬人手抖動

? ? ActionChains(dr).release().perform()? # 松開滑塊按鈕

# 處理驗證碼

def deal_slider_captcha(dr):

? ? time.sleep(3)

? ? img1, img2 = get_img(dr)

? ? offset = get_offset(img1, img2)

? ? track = get_track(offset)

? ? slider_btn(dr, track)

基于 selenium 的 webdriver

from selenium import webdriver

if __name__ == '__main__':

? ? dr = webdriver.Chrome('chromedriver的地址')

? ? deal_slider_captcha(dr)

福利

下面有我整理的一些資料有興趣可以一起學習最后祝大家 前程似錦?。?/b>

這份資料整體是圍繞著【軟件測試】來進行整理的,主體內(nèi)容包含:python自動化測試專屬視頻、Python自動化詳細資料、全套面試題等知識內(nèi)容。對于軟件測試的的朋友來說應該是最全面和完整的備戰(zhàn)倉庫了,這個倉庫也陪伴我走過了很多坎坷的路,希望也能幫助到你。

1.可以關(guān)注我的公眾號 清風酔 獲取

2.可以關(guān)注我的B站號,里面有詳細的教程感興趣的可以去看看

程序員丶醉清風的個人空間_嗶哩嗶哩_Bilibili

感謝相遇,感謝緣分,感謝支持,感謝選擇,感謝信任。祝大家可以順利找到心儀的工作!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容