點擊「Python編程與實戰」,選擇「置頂公衆號」
python
第一時間獲取 Python 技術乾貨!web
考慮這樣一個場景,當你在app端提交訂單/登陸的時候有一個滑動驗證碼怎麼處理?chrome
通常咱們會採用自動化瀏覽器完成這樣的抓取,可是效率過低。本篇文章嘗試將滑動驗證碼和抓取的代碼進行解耦。編程
也就是滑動驗證碼模塊只管獲取滑動以後的token,而抓取的代碼只管抓取。中間經過相關存儲介質進行通信。json
背景分析
經過各類嘗試發現,某app中阿里雲的滑動驗證碼只是操做行爲的驗證。瀏覽器
簡而言之,就是阿里雲只是知道有人滑了驗證碼,而且此驗證碼並無被使用過。微信
經過分析和嘗試,咱們徹底能夠有一個自動化瀏覽器去滑動生成未使用過的token,而後經過python讀取token完成相關抓取。session
這樣至關於有個滑動驗證碼池,其餘的業務須要的話能夠直接讀取使用。app
準備知識
puppeteer破解阿里h5滑動驗證碼async
chrome遠程調試webview(https://developers.google.cn/web/tools/chrome-devtools/remote-debugging/webviews?hl=zh-cn)
流程分析
使用puppeteer生成未使用過的滑動驗證碼,並把相關信息攔截,存起來。python讀取滑動驗證碼池,完成相關抓取。
效果展現


核心代碼
puppeteer 經過監聽response事件,把response的內容存起來
page.on('response',async response=>{
let url = response.url()
if (url.indexOf('analyze.jsonp')!==-1){
let content = await response.text()
if(content.indexOf('block')===-1){
let file_name = "slide/"+process.pid +Date.now()+".txt"
fs.writeFile(file_name,content+url,{encoding:'utf-8',mode:'0666'},function (err) {
console.log(err)
})
}
}
})
python讀取存儲的token

滑動驗證碼的token有3個字段,分別是csessionid,value,t(t的格式是xxx:時間戳:隨機數)
後記
寫這篇文章是爲了解決我在app中遇到阿里雲滑動驗證碼的問題,在羣友的提醒下,發現阿里雲app端的滑動驗證碼是個h5。
這樣的話,有一個專門的自動化瀏覽器不斷得到驗證碼,而我以前逆向出來的app接口還能繼續使用,也不枉一份辛苦。
做者:陽光下的小樹
https://me.csdn.net/u013356254
推薦閱讀
THANKS
- End -
本文分享自微信公衆號 - Python編程與實戰(GoPy1024)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。