前言
研究爬蟲的各位小夥伴都知道,需要登錄才能獲取信息的網站,是比較難爬的,原因就是在於,現在各大網站爲了反爬,都加入了圖片驗證碼,滑動驗證碼之類的干擾,
本篇就針對視頻門戶網站的滑動驗證碼進行講解和破解
關於破解滑動驗證究竟是自己使用機器學習還是第三方服務討論
先說一下個人觀點:本人作爲一個爬蟲老鳥,如果只是爲了使用,非常建議使用第三方服務,爲什麼呢,來聽我細細分析,
現在是2020年了,混IT的都知道,現在大紅大紫的熱門行業是哪個,肯定都說機器學習,都想入門機器學習,但是很多人還沒入門就掛了,這是爲什麼呢,因爲入門機器學習,是需要有高數的底子的,可不是以前學一個語言,會常用邏輯就可以入門的了,這也是爲什麼到現在爲止,依然還有非常大的機器學習人才缺口,再說一下爲什麼自己做爬蟲不建議使用機器學習,三個字,玩不起,
首先,你需要有大量的數據,然後再有一個不錯的主機用於訓練,再然後,就是需要你有高數的底子,如果這三個都有,並且學習了機器學習,你纔可以勉強破解滑動驗證碼,並且不敢保證自己訓練的準確度,
這就是我推薦使用第三方接口的原因,因爲第三方接口就是專門做這類機器學習的,它們有強大的人力物力專門做破解各種驗證碼,並且識別率非常高,現在一般都是90%以上,價格還香,何樂不爲了,自己做是頭髮掉的少還是加不夠多
當然,並不是說我不讓學習機器學習,畢竟現在是一個人工智能時代,如果已有不錯的數學基礎,並且有很強大興趣,在工作之餘,可以入坑機器學習的,畢竟趨勢如此,
本人的觀點是,如果是爬蟲遇到了滑動驗證碼,直接使用第三方平臺,如果你很有研究興趣,繼續需坑機器學習,
本文使用的第三方服務:https://2captcha.com/
根據本人測試,是目前識別率最高的平臺,價格還行,3美元幾百次吧
所需工具
En.... 我們這裏不需要 selenium,2captcha打碼平臺很神奇,來看我細細講解
2captcha打碼平臺參數分析
既然我們選擇了第三方平臺,我們務必要看一下人家的文檔。
首先打開人家官網
嗯...純英文,我也看不懂..怎麼辦呢,彆着急,我帶你們一步一步分析主要功能
登錄賬號
登錄完成後,會自動跳到主頁
紅色圈起來的地方表示剩餘多少錢,沒有錢的話記得要氪金,否則是不能用滴,氪金過程這裏就不多做解釋了哈,問題不大
藍色圈起來的地方表示這是你的唯一key,每次請求要帶上這個key的,所以要保管好
進入主題,研究文檔
點擊紅色圈的地方,API,一般API都是文檔,come
En....什麼玩意..完全看不懂,別慌,往下滑
滑動到Rates,我們能看到一個列表,我們要解決的就是極驗(GeeTest),所以我們只看GeeTest就好了,點擊GeeTest,look
好了,我已經懵逼了,但是,怕什麼,我們有翻譯!!!
這裏大概整理一下它的意思
首先,找到目標網站的gt,challenge和api_server三個值,然後,加上其他一些參數發送到 https://2captcha.com/in.php,會返回一個任務ID
然後等個15秒左右以後,再像 https://2captcha.com/res.php 請求,帶上任務ID加上一些其他參數
開始行動
- 在目標網站上找到gt,challenge,api_server三個東西,我們切換到dilidili找一下
我們點擊network,刷新網頁,重新加載所有請求,crtl+f,搜索challenge
竟然找到了,但是到底之不是這個呢,人家2captcha文檔說了,通常可以在initGeetest發現他,我們嘗試下
點擊Elements,ctrl+shift+f全局搜索一下,搜索initGeetest
還真有一個,我們點進去看看
還真有這個,我們打上斷點,再次刷新,匹配一下是否和network裏的一樣
上面是斷點的值,下面是network的值,至少看着一樣的,我們至少可以確定,有很大關係
至少我們確定了兩個值,gt和challenge,還差一個api_server
我們隨便輸入賬號密碼點擊登錄一下,觸發一下極驗,在elements中,搜索api_server
紅色圈起來的地方就表示是api_server,ok,基本工作基本完成
- 剛纔我們也說了,參數都找齊了,那我們就該請求打碼平臺了
那我們,就幹吶,前面說到,在network中,請求 https://passport.bilibili.com/web/captcha/combine?plat=11 就可以獲得gt,challenge,外加一個key
Ok,我們來請求一下
這樣,我們就拿到了gt,challenge
我們請求一下打碼平臺的接口,帶上自己參數
打碼平臺需要請求兩次,第一次返回的是任務ID,第二次纔是滑動模塊的成功值
注:challenge是動態的,其他的是靜態的
API_KEY是打碼平臺的key,開頭介紹的那個
兩個函數,我們就成功的拿到了打碼平臺返回的值
紅色圈起來的,就是破解極驗的第一個關鍵參數,這個參數拿到之後呢,就已經跟人家打碼平臺沒關係啦,我們只需要帶着相關參數,登錄嗶哩嗶哩就好了,但是這個參數要往哪發呢,在network經過一番查找後,似乎發現一個和登錄有關的接口
我們可以看到,紅色框圈起來的部分,正式2captcha平臺返回給我們的數據,key,正是 ...combine?plat=11 url返回的key,就是password,進行了加密,他是如何加密的呢
經過不斷的斷點,不斷地斷點...終於確定了,密碼會經過這個函數進行加密,它本質是 RSA非對稱加密 聽着就嚇人,不慌,盤它,
這個函數邏輯是先請求一個xxx這個url,帶上一個隨機數,然後會返回一個隨機hash,和一個公鑰key,公鑰key是固定的,然後將隨機hash和密碼進行加密,發送後他後,後臺進行解密
破解代碼
通過上述兩個函數,就模擬出了密碼,最後,
我們只需要提交到後臺就可以了,
示例效果
如果賬號密碼錯誤
如果賬號密碼正確
第一個表示跳轉的url,第二個是返回的cookie,如果我們在請求嗶哩嗶哩的其他東西,只需要帶着這個cookie就好了,ok,結束
完整代碼
嗶哩嗶哩.txt