【自動(dòng)化測(cè)試】繞過(guò)登錄模塊的騰訊云滑塊驗(yàn)證碼

篇幅較長(zhǎng)紧帕,請(qǐng)大家耐心看完盔然,建議收藏慢慢看,另外文末給大家準(zhǔn)備了福利(好幾套面試題加學(xué)習(xí)資料等)焕参,需要自惹峒汀!

做自動(dòng)化 UI 測(cè)試時(shí)叠纷,遇到登錄有驗(yàn)證碼校驗(yàn)無(wú)法繞過(guò)時(shí),可以使用下面的方法潦嘶。

就是登錄模塊的這種騰訊云滑塊驗(yàn)證碼涩嚣。

發(fā)現(xiàn)有缺口的圖片和沒(méi)有缺口的圖片,url 里的 img_index 參數(shù)不同掂僵。(一個(gè) img_index=1航厚,一個(gè) img_index=0)

所以用 PIL 庫(kù),對(duì)比 驗(yàn)證碼圖片 有缺口和無(wú)缺口的不同锰蓬,計(jì)算出偏移量幔睬,模擬滑塊滑動(dòng)。

import random

import io

from PIL import Image

from urllib.request import urlopen

from selenium.webdriver.common.action_chains import ActionChains

import time

# 打開(kāi)圖片鏈接

def open_img_url(src):

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

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

? ? # 恢復(fù)原始大小

? ? 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)

# 比較兩張圖片同一點(diǎn)上的像數(shù)值芹扭,差距大于設(shè)置標(biāo)準(zhǔn)返回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

# 獲取缺口的偏移量麻顶,兩張圖片對(duì)比,(i,j)像素點(diǎn)的RGB差距赦抖,過(guò)大則該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

# 計(jì)算滑塊的移動(dòng)軌跡 滑塊并不是從0開(kāi)始移動(dòng),有一個(gè)初始值

def get_track(offset):

? ? offset -= 30

? ? return [offset / 4] * 4

# 模擬釋放鼠標(biāo)抖動(dòng)

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())

# 按軌跡移動(dòng)

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())

# 完成拖動(dòng)操作

def slider_btn(dr, track):

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

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

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

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

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

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

# 處理驗(yàn)證碼

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)

福利

下面有我整理的一些資料有興趣可以一起學(xué)習(xí)最后祝大家 前程似錦8ㄉ觥队萤!

這份資料整體是圍繞著【軟件測(cè)試】來(lái)進(jìn)行整理的,主體內(nèi)容包含:python自動(dòng)化測(cè)試專屬視頻矫钓、Python自動(dòng)化詳細(xì)資料要尔、全套面試題等知識(shí)內(nèi)容。對(duì)于軟件測(cè)試的的朋友來(lái)說(shuō)應(yīng)該是最全面和完整的備戰(zhàn)倉(cāng)庫(kù)了新娜,這個(gè)倉(cāng)庫(kù)也陪伴我走過(guò)了很多坎坷的路赵辕,希望也能幫助到你。

1.可以關(guān)注我的公眾號(hào) 清風(fēng)酔 獲取

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

程序員丶醉清風(fēng)的個(gè)人空間_嗶哩嗶哩_Bilibili

感謝相遇匆帚,感謝緣分,感謝支持旁钧,感謝選擇吸重,感謝信任。祝大家可以順利找到心儀的工作歪今!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚎幸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寄猩,更是在濱河造成了極大的恐慌嫉晶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件田篇,死亡現(xiàn)場(chǎng)離奇詭異替废,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)泊柬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門椎镣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人兽赁,你說(shuō)我怎么就攤上這事状答。” “怎么了刀崖?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵惊科,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我亮钦,道長(zhǎng)馆截,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任蜂莉,我火速辦了婚禮蜡娶,結(jié)果婚禮上混卵,老公的妹妹穿的比我還像新娘。我一直安慰自己翎蹈,他們只是感情好淮菠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著荤堪,像睡著了一般合陵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澄阳,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天拥知,我揣著相機(jī)與錄音,去河邊找鬼碎赢。 笑死低剔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肮塞。 我是一名探鬼主播襟齿,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枕赵!你這毒婦竟也來(lái)了猜欺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拷窜,失蹤者是張志新(化名)和其女友劉穎开皿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體篮昧,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赋荆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懊昨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄潭。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疚颊,靈堂內(nèi)的尸體忽然破棺而出狈孔,到底是詐尸還是另有隱情,我是刑警寧澤材义,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站嫁赏,受9級(jí)特大地震影響其掂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潦蝇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一款熬、第九天 我趴在偏房一處隱蔽的房頂上張望深寥。 院中可真熱鬧,春花似錦贤牛、人聲如沸惋鹅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闰集。三九已至,卻和暖如春般卑,著一層夾襖步出監(jiān)牢的瞬間武鲁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蝠检, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沐鼠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓叹谁,卻偏偏與公主長(zhǎng)得像饲梭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子焰檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容