一. 驗證碼簡介
驗證碼,即CAPTCHA,全自動區分計算機和人類的公開圖靈測試,換而言之,驗證碼是一種用於區分人類與計算機的測試,只有通過了CAPTCHA,當前用戶才被認為是人類。
私信小編007即可獲取數十套PDF哦!
首先,我手動完成了一次滑塊驗證碼的驗證,想看看需要向服務器端發送什麼請求才算是通過了驗證,隨便點開了一個,發現請求需要的參數是這樣的:
搞清楚每個參數當然是可以的,但大夏天的實在沒有這個耐心,而且萬一過幾天驗證碼的版本又升級了呢?豈不是透心涼。罷了罷了,安心當個鹹魚吧,反正是自己玩,沒有環境等因素限制,用Selenium算了吧。那麼問題來了,如何用Selenium破解滑塊驗證碼呢?簡單想了一下,感覺應該是這樣的:
那麼滑塊到缺口的距離該如何計算呢?
之前看到很多人是這麼算的:
出現滑塊驗證碼界面時對屏幕進行截圖(此時背景圖是完整的),然後模擬點擊滑動圓球,使滑塊和缺口出現(此時背景圖是有缺口的),此時再次截圖,通過對比兩次截圖即可輕鬆地找到缺口位置。
上述方案有如下兩個問題:
(1)如何獲取完整的背景圖?
答案:當你完成滑塊驗證碼的驗證時,還是會出現對應的完整背景圖的,通過截屏軟件截下圖就好了。
結果如下:
(2)怎麼找到當前滑塊驗證碼對應的完整背景圖?
答案:因為只有四張圖,沒必要用一些高大上的圖像匹配算法,看了下四張圖左上角頂點處的像素值,其中R值分別為:255,217,227,100,顯然,通過對比背景圖左上角頂點處的像素值即可找到當前滑塊驗證碼對應的完整背景圖了,代碼實現如下:
注意,因為截圖是這樣子的:
即:先快速向右拖動,快到缺口時,再減速慢調。那麼這樣的軌跡該如何生成呢?
我想了兩種方案:
方案一是根據物理學中的加速度減速度來模擬拖動滑塊的軌跡,代碼實現如下:
方案二是直接構造一些函數來模擬拖動滑塊的軌跡,函數代碼實現如下:
最後,使用Selenium按照設定的軌跡將滑塊移動到缺口處即可:
That'all~
等到天氣舒服一點我再優化一下破解方案吧,這個破解方案看起來挺low的,哈哈哈哈哈
閱讀更多 繁華落盡and曲終人散 的文章