上一篇-Python爬蟲-百度模擬登陸(一)
接上一篇的繼續html
codestring | jxG9506c1811b44e2fd0220153643013f7e6b1898075a047bbd |
---|
套路我相信不少人已經掌握了,先在Charles中搜索值
python
參數值都看到了,token、tt、dv、callback這些變化的參數咱們都知道了吧,其餘的參數固定,別問我爲何。這個logincheck注意到了嗎?是否是有人能想起前面的?不能放在字典裏賦空值,要直接寫在url後面,好了輕鬆搞定codestring。chrome
verifycode | 又把 |
---|
驗證碼就不用全量搜索了,圖片嘛,瀏覽一下圖片請求就知道了
參數是codestring不用我提醒了吧,請求一下手動輸入哦,有的人問爲何不搞自動識別的,其實沒有必要,如今打碼平臺很便宜,並且大部分驗證碼均可以搞定,若是本身去搞得話,太費時間識別率還低,因此我這裏就不說驗證碼這個了,若是有時間之後單獨寫一篇吧。緩存
traceid | EA43E001 |
---|
老套路先搜索值,沒搜到!!!,換name試試
微信
搜了不少發現都是這個createTraceID函數建立的
cookie
都找到了,本身翻譯一下吧app
ppui_logintime | 19863 |
---|
又是個時間,直接搜name吧
函數
只搜到這一個,而後搜一下timespan
當前時間減去一個初始時間,這是一個時間段,應該是從某次請求開始到某次請求結束,對於這種咱們捏造一個吧,不必那麼精確,看一下大概的時間,取15000~30000吧學習
rsakey | 3kUWNJ6tggVCigi7EoQZcsuKpBcDKPKj |
---|
搜一下值
ui
須要的參數不說了哦,這回看看返回值,pubkey、key,這個key的值就是咱們的rsakey,pubkey咱們後面會用到,先記下
fp_uid | 19ec2fa82bec175d9628b81d9683e9d2 |
---|---|
fp_info | 0245fc9782abae99a665854526e19a19002~~~nIpK32ZQH2~fI2i_lnn9ypKA34B... |
這兩個參數放在一塊兒說,注意fp_uid和fp_info前面的是同樣的,從002開始不同了~
先搜了fp_uid,發現是獲取cookie的,又沒有搜到set cookie的地方,那麼有多是經過本地生成的,對於本地生成的,其實最簡單就是固定值,我也是使用固定值試了試,沒有問題,固然是調試了一番之後才這麼作的,由於調試太麻煩了。再搜一下fp_info看看吧
這個就可能性比較大了,開始調試了,打開chrome->隱身模式->清理緩存->打開百度首頁->點擊一下登陸按鈕,找到剛纔的js文件,搜
而後再清理緩存,從新刷新百度首頁,點擊登陸按鈕
打印一下n和t的值
開始調試,進入到這個函數之後,咱們看到這裏有幾個函數d.genGUID,打印一下看看
是否是有點fp_uid的樣子了,那就它了,這是哪一個函數呢,很簡單,打印一下
翻譯成python或者用python執行js腳本的方式都行,fp_uid幹掉了吧,fp_info後半部分太麻煩了,有誰搞定了麻煩告訴我一聲。我這裏就用固定值了。
password | ai2s9z7UUf9XFguwg6EUslu607/CNrit0B3c4mGF/VzEIjc+SkFM7kuSRx2LWkTAk0lecetCIQcpZ9xKtXdKy3NG7aJfkFbWxMFqCNtM3birZbkgQw6l7UKGYpeuIDAn0ae/52nU4HkcSmPAL8iGV7hQP9CxoWYpL59r8Vq8dug= |
---|
搜一下password=
斷點打好了就開始調試吧,完犢子了今天死活調試不到斷點處了,其實這個比較明顯的,固然若是你對rsa加密不瞭解或者瞭解的很少那就不容易了,首先想一想咱們前面獲取的pubkey的值,-----BEGIN PUBLIC KEY-----......-----END PUBLIC KEY-----\n,我先貼一下代碼吧
def encript_password(self, password, pubkey): pub = rsa.PublicKey.load_pkcs1_openssl_pem(pubkey.encode('utf-8')) encript_passwd = rsa.encrypt(password.encode('utf-8'), pub) return base64.b64encode(encript_passwd).decode('utf-8')
看一下這個load_pkcs1_openssl_pem函數
def load_pkcs1_openssl_pem(cls, keyfile): """Loads a PKCS#1.5 PEM-encoded public key file from OpenSSL. These files can be recognised in that they start with BEGIN PUBLIC KEY rather than BEGIN RSA PUBLIC KEY. The contents of the file before the "-----BEGIN PUBLIC KEY-----" and after the "-----END PUBLIC KEY-----" lines is ignored. :param keyfile: contents of a PEM-encoded file that contains the public key, from OpenSSL. :return: a PublicKey object """ der = rsa.pem.load_pem(keyfile, 'PUBLIC KEY') return cls.load_pkcs1_openssl_der(der)
若是js能夠調試進去_SBCtoDBC,你就會發現它對BEGIN和END的處理,那實際上它就是在作rsa加密,因此說若是你瞭解rsa的這種加密方式,看到BEGIN PUBLIC KEY和END PUBLIC KEY的時候就立刻能猜出來了,因此加密函數已經給你了,pubkey獲取了,password你本身知道,那這個也搞定了。
至此,登陸參數都搞定了,咱們能夠向下進行了
請求的url和參數都在登陸的返回值裏,解析一下https://www.baidu.com/cache/user/html/v3Jump.html?err_no=0&callback=parent.bd__pcbs__psvho&codeString=&userName=wuqing198985&phoneNumber=&mail=&hao123Param=RmxaRU5VTVcxTVNWcDFiMDlEU3psMWFVeGtaa2c0TldOSk0yVk1WVFV0WWxCcmVuUmxWSEl0VWpsaVl6bGhRVUZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUNzdWQwS2QzVnhhVzVuTVRrNE9UZzFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIM2dwMXA5NEtkYVJG&u=https://www.baidu.com/&tpl=mn&secstate=&gotourl=&authtoken=&loginproxy=&resetpwd=&vcodetype=&lstr=<oken=&bckv=1&bcsync=KnqkeCS8J7B9vuKnaRltPTrp9Kl0hPsH6votXG00OmsypOV8lYboSn7pxuyb%2F1l8XUlp9M0v0gIKoL9og3nXmZYFaGCcMO%2Fx4roGpF7SFA0cqXGlnhwGeBmIY5cVxgeM6aJ2RjPXp3fb6q41WjTiipEvOXCvcfuW7XLemxoEv%2F2ribszd6n7ql7aO7l850fOFqzBiZGeBNu3D0OZFnJeSsOHMEquD6Ahw9dbRl9ahaaRSEMDxQtrn36Bj2jayIY88OTyu7CWjtApT2eZ2SfAjBhr3IzHbnbSPhtoL82nsH7WwqHGeqq3uxYDdqH7ZkgjE3JlQV9SDQCPTnfpPxIrYg%3D%3D&bcchecksum=2590966377&code=&bdToken=&realnameswitch=&setpwdswitch=&bctime=1520951421&bdstoken=&authsid=&jumpset=&appealurl=&realnameverifyemail=0&traceid=&realnameauthsid=&accounts=
請求完之後,返回值裏沒有什麼明顯的有用值,那我就直接訪問了一下首頁
咱們怎麼斷定登陸成功呢,通常就是獲取有用戶名的頁面,而後獲取一下用戶名,看是否存在,若是有那麼就登陸成功了。很幸運訪問首頁後登陸成功了。百度模擬登陸到這裏就結束了。以前微博模擬登陸的時候,訪問一個頁面,返回值裏是下一個頁面連接,再訪問再返回下一個。咱們在處理這種的時候呢,咱們要怎麼處理呢?
逆向推理:首先找咱們須要的目標點,好比一開始我就找登陸請求,而後看登陸請求裏面須要哪些參數,而後再一步步分析這些參數的來源,其實就是逆向推,另外登陸請求完成後,再找一個目標點,就是已登陸的頁面,若是沒有成功,就從登陸往下看。基本就是這麼一個思路。
最後要再說一下,寫這個的目的並非爲了什麼項目之類的,就是學習,練習一下,因此你們就不要吹毛求疵了,並且我也不接受吐槽。其餘文章能夠查看個人簡書呦。簡書-星星在線
若是你以爲個人文章還能夠,能夠關注個人微信公衆號:Python爬蟲實戰之路
也能夠掃描下面二維碼,添加個人微信號