1. 通過Firefox配合插件Tamper Date獲取登錄時客戶端向服務器端提交的數據, 并且發現lt和execution這兩個字段每次登錄時都不一樣.
POSTDATA=username=your_id&password=your_pwd<=LT-239317-XyzqoketZ2AhHE5BSIKLwW7gNyb4sP&execution=e2s1&_eventId=submit
2.??于是查看https://passport.csdn.net/account/login?ref=toolbar的網頁源代碼, 發現有相應注釋:
... <!-- 該參數可以理解成每個需要登錄的用戶都有一個流水號。只有有了webflow發放的有效的流水號,用戶才可以說明是已經進入了webflow流程。否則,沒有流水號的情況下,webflow會認為用戶還沒有進入webflow流程,從而會重新進入一次webflow流程,從而會重新出現登錄界面。 --><input type="hidden" name="lt" value="LT-20682-CNLFEebzNFkqC7PUQded5V6b7j3Qd9" /><input type="hidden" name="execution" value="e13s1" /> <input type="hidden" name="_eventId" value="submit" /> ...
?
最后附上代碼:
import re import requests url="https://passport.csdn.net/account/login" head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36", } s=requests.session() r=s.get(url,headers=head) lt_execution_id=re.findall('name="lt" value="(.*?)".*\sname="execution" value="(.*?)"', r.text, re.S) payload={"username":"your_id","password":"your_pwd","lt":lt_execution_id[0][0],"execution":lt_execution_id[0][1],"_eventId":"submit" } r2=s.post(url,headers=head,data=payload) print r2.text #登錄成功會返回一段loginapi.js的腳本 print "*"*100 #分隔符 r3=s.get("http://my.csdn.net",headers=head) print r3.text #成功獲取"我的主頁"源代碼
?