驗證碼往往是爬蟲路上的乙隻攔路虎,而其花樣也是層出不窮:驗證、滑塊驗證、互動式驗證、行為驗證等。隨著ocr技術的成熟,驗證已經漸漸淡出主流,而滑塊驗證越來越多地出現在大眾視野。
「這麼厲害,這小子長啥樣呢?」沒錯,它就長這損sai:
解決它的方法也很直觀,首先找到缺口的位置(通常只需要x軸的位置),然後拖動滑塊即可。
今天kimol君將帶領大家用python識別出滑塊驗證中的缺口位置。
識別中的缺口,主要是利用python中的影象處理庫cv2,其安裝方法如下:
pip install opencv-python
注:這裡並不是「pip install cv2」哦~
滑塊驗證的分為兩部分,乙個是背景:
另乙個是缺口:
利用imread函式將其讀取:
# 讀取背景和缺口
bg_img = cv2.imread('bg.jpg') # 背景
tp_img = cv2.imread('tp.png') # 缺口
為了更好地將缺口與背景匹配,我們首先得識別出的邊緣:
# 識別邊緣
bg_edge = cv2.canny(bg_img, 100, 200)
tp_edge = cv2.canny(tp_img, 100, 200)
這一步很關鍵!否則缺口匹配將不準確。
這裡得到了邊緣的灰度圖,進一步將其格式轉為rgb格式:
# 轉換格式
bg_pic = cv2.cvtcolor(bg_edge, cv2.color_gray2rgb)
tp_pic = cv2.cvtcolor(tp_edge, cv2.color_gray2rgb)
轉換後的背景圖為:
轉換後的缺口圖為:
利用cv2中的matchtemplate函式,可以在背景中搜尋對應的缺口,具體**如下:
# 缺口匹配
res = cv2.matchtemplate(bg_pic, tp_pic, cv2.tm_ccoeff_normed)
res為每個位置的匹配結果,代表了匹配的概率,選出其中概率最高的點,即為缺口匹配的位置:
min_val, max_val, min_loc, max_loc = cv2.minmaxloc(res) # 尋找最優匹配
min_val,max_val,min_loc,max_loc分別為匹配的最小值、匹配的最大值、最小值的位置、最大值的位置。
ps.當然,這裡完全可以自己寫乙個迴圈來實現,但是有現成的函式為什麼不用呢?
至此,我們已經有了缺口的位置,其x軸座標為:
x = max_loc[0]
為了更直觀地展示缺口的位置,我們將缺口用矩形框標註出來:
# 繪製方框
th, tw = tp_pic.shape[:2]
tl = max_loc # 左上角點的座標
br = (tl[0]+tw,tl[1]+th) # 右下角點的座標
cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪製矩形
cv2.imwrite('out.jpg', bg_img) # 儲存在本地
結果如下:
完美~ 收工!!!
為了在實際應用中更方便的使用,我們將**封裝為乙個函式程式設計客棧:
def identify_gap(bg,tp,out):
'''bg: 背景
tp: 缺口
out:輸出
'''# 讀取背景和缺口
bg_img = cv2.imread(bg) # 背景
tp_img = cv2.imread(tp) # 缺口
# 識別邊緣
bg_edge = cv2.canny(bg_img, 100, 200)
tp_edge = cv2.canny(tp_img, 100, 200)
# 轉換格式
bg_pic = cv2.cvtcolor(bg_edge, cv2.color_gray2rgb)
tp_pic = cv2.cvtcolor(tp_edge, cv2.color_gray2rgb)
# 缺口匹配
res = cv2.matchtemplate(bg_pic, tp_pic, cv2.tm_ccoeff_normed)
min_val, max_val, min_loc, max_loc = cv2.minmaxloc(res) # 尋找最優匹配
# 繪製方框
th, tw = tp_pic.shape[:2]
tl = max_loc # 左上角點的座標
br = (tl[0]+tw,tl[1]+th) # 右下角點的座標
cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪製矩形
cv2.imwrite(out, bg_img) # 儲存在本地
# 返回缺口的x座標
return www.cppcns.comtl[0]
這裡選擇了讀取本地檔案,在爬蟲過程中其實不是特別方便。如果有感興趣的小夥伴,可以自己改動一下,將輸入改為流即可。
小紅書滑塊驗證爬蟲 Python滑塊驗證碼模型!
slideryolo簡介 使用方式 返回滑塊座標 在slider infer.py檔案中可以看到下面的函式 def infer config config 模型路徑 detector detector config,use gpu false,run mode fluid results detec...
python 如何用列舉法驗證6174猜想
6174猜想 對任意各位數字不相同的四位數,使用各位數字能組成的最大數減去能組成的最小數,對得到的差重複操作,最終能得到6174,並且這個操作最多不會超過7次。運用的知識點 usr bin env python3 coding utf8 import itertools s list itertoo...
python處理滑塊驗證的軌跡計算問題
在上一回中說了五行 找圖中滑塊驗證的缺口位置 python五行 解決滑塊驗證的缺口距離識別,破解滑塊驗證 本章講軌跡相關的問題。滑塊驗證核心是後台驗證軌跡引數,效驗軌跡取點的分布,正常情況是如下圖的離散分布 如果橫座標x是時間 縱座標y是位移,那麼每個點的切線就是加速度,會發現這樣的乙個規律,加速度...