爬蟲 | 破解APP中阿里雲滑動驗證碼

點擊「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



推薦閱讀


繼續送書,無套路送書,每週都送!

全面擁抱FastApi—三大參數及驗證



THANKS

- End -


點個「在看」必升職加薪喔!

本文分享自微信公衆號 - Python編程與實戰(GoPy1024)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索