圖1 圖2html
解決思路:這種是最簡單的一種,只要識別出裏面的內容,而後填入到輸入框中便可。這種識別技術叫OCR,這裏咱們推薦使用Python的第三方庫,tesserocr。對於沒有什麼背影影響的驗證碼如圖2,直接經過這個庫來識別就能夠。可是對於有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種咱們就得須要先處理一下圖片,先對圖片進行灰度化,而後再進行二值化,再去識別,這樣識別率會大大提升。網絡
這種是將備選碎片直線滑動到正確的位置,以下圖ui
解決思路:對於這種驗證碼就比較複雜一點,但也是有相應的辦法。咱們直接想到的就是模擬人去拖動驗證碼的行爲,點擊按鈕,而後看到了缺口 的位置,最後把拼圖拖到缺口位置處完成驗證。spa
第一步:點擊按鈕。而後咱們發現,在你沒有點擊按鈕的時候那個缺口和拼圖是沒有出現的,點擊後纔出現,這爲咱們找到缺口的位置提供了靈感。3d
第二步:拖到缺口位置。咱們知道拼圖應該拖到缺口處,可是這個距離若是用數值來表示?經過咱們第一步觀察到的現象,咱們能夠找到缺口的位置。這裏咱們能夠比較兩張圖的像素,設置一個基準值,若是某個位置的差值超過了基準值,那咱們就找到了這兩張圖片不同的位置,固然咱們是從那塊拼圖的右側開始而且從左到右,找到第一個不同的位置時就結束,這是的位置應該是缺口的left,因此咱們使用selenium拖到這個位置便可。這裏還有個疑問就是如何能自動的保存這兩張圖?這裏咱們能夠先找到這個標籤,而後獲取它的location和size,而後 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,而後截圖,最後摳圖填入這四個位置就行。具體的使用能夠查看selenium文檔,點擊按鈕前摳張圖,點擊後再摳張圖。最後拖動的時候要須要模擬人的行爲,先加速而後減速。由於這種驗證碼有行爲特徵檢測,人是不可能作到一直勻速的,不然它就斷定爲是機器在拖動,這樣就沒法經過驗證了。htm
圖文驗證:經過文字提醒用戶點擊圖中相同字的位置進行驗證。blog
圖標選擇: 給出一組圖片,按要求點擊其中一張或者多張。借用萬物識別的難度阻擋機器。教程
這兩種原理類似,只不過是一個是給出文字,點擊圖片中的文字,一個是給出圖片,點出內容相同的圖片。接口
這兩種沒有特別好的方法,只能藉助第三方識別接口來識別出相同的內容,推薦一個超級鷹,把驗證碼發過去,會返回相應的點擊座標。圖片
而後再使用selenium模擬點擊便可。具體怎麼獲取圖片和上面方法同樣。
這種就很棘手,每一次出現的都不同,可是也會出現同樣的。並且拖動順序都不同。
可是咱們發現不同的驗證碼個數是有限的,這裏採用模版匹配的方法。我以爲就好像暴力枚舉,把全部出現的驗證碼保存下來,而後挑出不同的驗證碼,按照拖動順序命名,咱們從左到右上下到下,設爲1,2,3,4。上圖的滑動順序爲4,3,2,1因此咱們命名4_3_2_1.png,這裏得手動搞。當驗證碼出現的時候,用咱們保存的圖片一一枚舉,與出現這種比較像素,方法見上面。若是匹配上了,拖動順序就爲4,3,2,1。而後使用selenium模擬便可。
參考資料: