破解滑塊(極驗)驗證碼思路


破解核心思路:

1、如何確定滑塊滑動的距離?

滑塊滑動的距離,需要檢測驗證碼圖片的缺口位置

滑動距離 = 終點坐標 - 起點坐標

然后問題轉化為我們需要屏幕截圖,根據selenium中的position方法並進行一些坐標計算,獲取我們需要的位置

 

 

2、坐標我們如何獲取?

起點坐標:

每次運行程序,位置固定不變,滑塊左邊界離驗證碼圖片左邊界有6px的距離

 

終點坐標:

每次運行程序,位置會變,我們需要計算每次缺口的位置

 

怎么計算終點也就是缺口的位置?

先舉個例子,比如我下面兩個圖片都是120*60的圖片,一個是純色的圖片,一個是有一個藍色線條的圖片(藍色線條位置我事先設定的是60px位置),我現在讓你通過程序確定藍色線條的位置,你怎么確定?

 

 

 

答案:

遍歷所有像素點色值,找出色值不一樣的點的位置來確定藍色線條的位置

這句話該怎么理解?大家點開我下面的圖片,是不是發現圖片都是由一個一個像素點組成的,120*60的圖片,對應的像素就是橫軸有120個像素點,縱軸有60個像素點,我們需要遍歷兩個圖片的坐標並對比色值,從(0,0)(0,1)......一直到(120,60),開始對比兩個圖片的色值,遇到色值不一樣的,我們return返回該位置即可

 

 

 

下面是簡單代碼演示,獲取缺口位置為60,跟我預先設定的位置一樣,后面會詳細介紹該方法如何操作

 

 

 

而我們目標網站的驗證碼圖片也是類似,這是我截圖的,一個是沒有缺口的驗證碼,一個是有缺口的驗證碼,我們同樣需要遍歷,但是注意一點的是,我們這次遍歷不是從圖片(0,0)開始遍歷,而是需要從滑塊的右側邊緣開始遍歷

 

 

 

接下來開始上代碼,用selenium模擬登陸,輸入用戶名和密碼,這些我就不再截圖代碼了,想必大家應該都會的,本文會分享完整源碼給大家,當然代碼也存在一些缺陷,希望大家在測試過程中能改進指正,具體的很多問題,仍然需要大家自己去運行,去體會,才行發現問題

 

1、獲取驗證碼位置坐標,尺寸大小

 

 

驗證碼需要截圖,大概手寫了一些計算過程,最后需要的驗證碼位置是上下左右的一個區域,我們從屏幕上根據這個區域進行截圖

 

 

代碼在運行中,發現計算的區域和實際截圖有出入,我根據數據,多次測試運行,發現截圖區域設定為(558,215,816,374)相對合適,可以截到驗證碼,這里是程序的問題之一,大家有興趣可以測試,看該地方如何優化

 

 

這一步是返回缺口位置left

 

 

這個方法是比較色值差異

 

 

計算滑動距離=119 - 邊緣空隙6 = 113

 

 

 

做到這一步,我們得出了需要滑動113px,然后我們的滑動,需要滿足物理學規律,即先加速,后減速的過程,因為人的實際操作也是這樣的,剛開始先加速,到后面開始減速

我設定的減速位置為mid,也就是滑動到五分之四的位置時候,速度開始降下來

中間定義了一個加速度a,當沒有到4/5距離時候,加速度為1,當滑動最后1/5距離時,加速度變為-2,該代碼參考崔大神的方法,根據數學公式,計算得出滑動軌跡,就相對模擬了一種相對真實的人的滑動過程

def get_track(self, distance):
   """
   根據偏移量獲取移動軌跡
   :param distance: 偏移量
   :return: 移動軌跡
   """
   track = []
# 當前位移
   current = 0
   mid = distance * 4 / 5
   # 計算間隔
   t = 0.2
   # 初速度
   v = 0
   while current < distance:
       if current < mid:
           # 加速度為正1
           a = 1
       else:
           # 加速度為負2
           a = -2
       # 初速度v0
       v0 = v
# 當前速度v = v0 + at
       v = v0 + a * t
# 移動距離x = v0t + 1/2 * a * t^2
       move = v0 * t + 1 / 2 * a * t * t
# 當前位移
       current += move
# 加入軌跡
       track.append(round(move))
return track

 

這是計算得出的滑動軌跡

 

 

 

另外注意,如果拖動過程發現拖得不夠,就設置為-10或者-11,讓軌跡多走點,如果發現拖得過了,就設置為-12,-13,讓軌跡少走點,多嘗試

 

 

總結:

本文主要分享破解思路,遇到bug解決方式,最后能調參數破解成功,讀懂本文的意思是目的,需要大家動手去體會其中的一些關鍵思路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM