#!/usr/bin/env python
#coding=utf-8
#@author:Chris iven
#Python version 3.6
"""
分析網站行爲:
login_url = "https://passport.hellobi.com/sso/login"
data:
_token
_token是在login_url裏面的一個 登錄必須帶的參數,單獨獲取不行!
username
password
其模擬登錄的思路便是:
利用session()維持當前會話信息,然後,在當前的頁面中提取想要的登錄必備的數據,在返回去進行登錄!
"""
"""
思路:
1.定製一個login()函數!
目的真正登錄!
2.定製一個login_web_get_token():
目的,獲取動態的_token!
然後登錄login()函數!
"""
import requests,re
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36",
"Referer":"https://www.hellobi.com/"}
def login(url,_token,r_session):
data = {"_token":_token,
"username":input("請輸入賬號:"),
"password":input("請輸入密碼:")
}
#這個函數纔是主角!
response = r_session.post(url,data=data,headers=headers)
return response.text
def login_web_get_token(url):
r_session = requests.Session()
"""
創建一個requests.Session()實例 r_session然後利用這個實例去訪問要訪問的頁面,就會把該頁面維持住!
然後,獲取該頁面上登錄所需要的數據,最後調用login()登錄!"""
page = r_session.get(url)
reg = re.compile(r'<meta name="_token" content="(.*?)"')
_token = re.findall(reg,page.text)[0]
login_page = login(url,_token,r_session)
#因爲我的天善智能博客名稱叫做 "Chris iven",所以這裏添加一個判斷!
if "iven" in login_page:
print("登陸成功!")
else:
print("登錄失敗!")
print(login_page)
if __name__ == "__main__":
url = "https://passport.hellobi.com/sso/login"
login_web_get_token(url)