圖形解鎖驗證碼破解(附Python程式碼)

前言:

爬蟲開源死得快,新浪微博又改策略了。在去年的這個時候,微博還是沒什麼限制的。2016年12月我將新浪微博爬蟲的程式碼作了一次更新,並將文章轉到了知乎,爬微博的人似乎從那個時候開始多了許多。也許是這個緣故,微博開始對IP設了限制,接著禁了原來免驗證碼的登入方式,現在將weibo.cn的登入途徑也關了,weibo.cn採用m.weibo.cn的登入,登入過程中可能出現圖形解鎖驗證碼。這種驗證碼比較少見,因為多用在手機平臺。

我懷疑QQ交流群(537549079)裡應該是有新浪微博反爬蟲的人,不過這也沒什麼關係,我們做爬蟲的,本來就是帶頭“製造麻煩”的人,沒有被請去喝茶,就已經要感恩了。另外需要宣告一點,其實我個人並不需要微博資料,平時自己也沒有爬,只是出於責任,既然把專案開源了,就有義務持續維護更新下去。另外是出於興趣愛好,作為一名爬蟲工作者,出現了新的反爬機制,我自己也是很興奮 很想去研究突破的。

廢話少說,上程式碼:WeiboSliderCode
執行效果:
微博登入

正文:

看到這種驗證碼時的第一感覺就是,效果還挺酷!第二感覺是,要破應該不難。
背景很乾淨,基本上不需要除噪;如果要寫程式破解,只需要判斷哪些點之間有連線,以及箭頭的指向即可。背景和線條的畫素很規範,使得我們只需要判斷畫素變化就可以很清晰地識別線條和箭頭方向。

圖片是由一個個畫素組成的,Image開啟圖片後一個畫素包含三個數值,分別代表RGB數值。將圖片轉為灰度影象後,每個畫素只有一個數值,從0到255(從黑到白)。將圖形解鎖驗證碼的圖片灰度化,可以發現圖片背景值為253,線條的灰度值都為小於253的數。
這裡寫圖片描述

縮小一下,來看看整張圖:
這裡寫圖片描述
是不是感覺這識別難度似乎也並不大?

後來我仔細想了一想,好像哪裡不對勁,這驗證碼,,才四宮格!!這意味著什麼?
四個點的連線,最多有多少種可能?手指掐一下也能算出:4*3*2*1=24。總共才24種可能,我只要手動收集這24張圖,人工標識軌跡。以後每次遇到驗證碼,只要比對一下這24張圖的畫素值就能知道軌跡方向了呀!
哭笑不得,這驗證碼還真是簡單得不行!

我們給四宮格的四個點定編號:1、2、3、4。如下圖。則軌跡可以標記為:”2314”。
圖形解鎖驗證碼

接下來收集24張圖:
圖形解鎖驗證碼2

然後將各個圖片轉為畫素矩陣,見Github程式碼中的 ims.py 檔案。
當遇到一張新圖片後,對比ims.py存的24張圖的畫素,得出軌跡方向。然後程式模擬操作滑鼠滑動解鎖。執行的效果圖上面已經有了。感興趣的可以拿程式碼執行一下。

程式執行步驟:

  1. 安裝Python2.7,安裝谷歌瀏覽器(Chrome)。
  2. 根據Chrome的版本下載chromedriver.exe(參考http://blog.csdn.net/huilan_same/article/details/51896672),解壓放在Chrome的安裝目錄,並將該路徑加入到環境變數。
  3. 需要安裝的Python模組:PIL、StringIO、selenium。
  4. 執行 login.py

結語:

群裡爬微博的,多是需要資料寫論文的學生,其中很多都是非計算機專業的同學,可能抓取微博的過程中會遇到各種問題。還是那句話,需要資料的,爬之前儘量先找群裡有資料的同學要,有償也可以,因為資料抓取本來就是需要投入大量時間和人力的。儘量不要給微博官方造成不必要的麻煩。

我喜歡追求技術,但不希望自己會給他人造成很大困擾,謝謝!如果有什麼問題請留言。

轉載請註明出處,謝謝!(原文連結:http://blog.csdn.net/bone_ace/article/details/71056741