1、輸入式驗證碼
這種驗證碼主要是通過用戶輸入圖片中的字母、數(shù)字、漢字等進行驗證。如下圖
解決思路:這種是最簡單的一種,只要識別出里面的內(nèi)容,然后填入到輸入框中即可。這種識別技術叫OCR,這里我們推薦使用Python的第三方庫,tesserocr。對于沒有什么背影影響的驗證碼如圖2,直接通過這個庫來識別就可以。但是對于有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種我們就得需要先處理一下圖片,先對圖片進行灰度化,然后再進行二值化,再去識別,這樣識別率會大大提高。
2.滑動式驗證碼
解決思路:對于這種驗證碼就比較復雜一點,但也是有相應的辦法。我們直接想到的就是模擬人去拖動驗證碼的行為,點擊按鈕,然后看到了缺口的位置,最后把拼圖拖到缺口位置處完成驗證。
第一步:點擊按鈕。然后我們發(fā)現(xiàn),在你沒有點擊按鈕的時候那個缺口和拼圖是沒有出現(xiàn)的,點擊后才出現(xiàn),這為我們找到缺口的位置提供了靈感。
第二步:拖到缺口位置。我們知道拼圖應該拖到缺口處,但是這個距離如果用數(shù)值來表示?通過我們第一步觀察到的現(xiàn)象,我們可以找到缺口的位置。這里我們可以比較兩張圖的像素,設置一個基準值,如果某個位置的差值超過了基準值,那我們就找到了這兩張圖片不一樣的位置,當然我們是從那塊拼圖的右側開始并且從左到右,找到第一個不一樣的位置時就結束,這是的位置應該是缺口的left,所以我們使用selenium拖到這個位置即可。這里還有個疑問就是如何能自動的保存這兩張圖?這里我們可以先找到這個標簽,然后獲取它的location和size,然后 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然后截圖,最后摳圖填入這四個位置就行。具體的使用可以查看selenium文檔,點擊按鈕前摳張圖,點擊后再摳張圖。最后拖動的時候要需要模擬人的行為,先加速然后減速。因為這種驗證碼有行為特征檢測,人是不可能做到一直勻速的,否則它就判定為是機器在拖動,這樣就無法通過驗證了。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com