上一篇-Python爬蟲-百度模擬登錄(一)
接上一篇的繼續
參數 codestring
codestring | jxG9506c1811b44e2fd0220153643013f7e6b1898075a047bbd |
---|
套路我相信很多人已經掌握了,先在Charles中搜索值
參數值都看到了,token、tt、dv、callback這些變化的參數我們都知道了吧,其他的參數固定,別問我為什么。這個logincheck注意到了嗎?是不是有人能想起前面的?不能放在字典里賦空值,要直接寫在url后面,好了輕松搞定codestring。
參數 verifycode
verifycode | 又把 |
---|
驗證碼就不用全量搜索了,圖片嘛,瀏覽一下圖片請求就知道了
參數是codestring不用我提醒了吧,請求一下手動輸入哦,有的人問為什么不搞自動識別的,其實沒有必要,現在打碼平台很便宜,而且大部分驗證碼都可以搞定,如果自己去搞得話,太費時間識別率還低,所以我這里就不說驗證碼這個了,如果有時間以后單獨寫一篇吧。
參數 traceid
traceid | EA43E001 |
---|
老套路先搜索值,沒搜到!!!,換name試試
搜了很多發現都是這個createTraceID函數創建的
都找到了,自己翻譯一下吧
參數 ppui_logintime
ppui_logintime | 19863 |
---|
又是個時間,直接搜name吧
只搜到這一個,然后搜一下timespan
當前時間減去一個初始時間,這是一個時間段,應該是從某次請求開始到某次請求結束,對於這種我們捏造一個吧,沒必要那么精確,看一下大概的時間,取15000~30000吧
參數 rsakey
rsakey | 3kUWNJ6tggVCigi7EoQZcsuKpBcDKPKj |
---|
搜一下值
需要的參數不說了哦,這回看看返回值,pubkey、key,這個key的值就是我們的rsakey,pubkey我們后面會用到,先記下
fp_info&fp_uid
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
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爬蟲實戰之路
也可以掃描下面二維碼,添加我的微信號