前言
? ? ? ? 近日心情郁悶尽狠,隨手寫了個(gè)模擬登陸的小腳本,大多數(shù)登陸網(wǎng)站都一樣叶圃,在這拋磚引玉袄膏。
? ? ? ? 以NIIT培訓(xùn)網(wǎng)站為例,因?yàn)閳?bào)了一個(gè)培訓(xùn)掺冠,每日登陸可送積分沉馆,老師上課不咋地還弄個(gè)頭在那,搞得看視頻整個(gè)尷尬癥都犯了(要是放個(gè)美女帥哥還差不多德崭,偷笑)斥黑,話不多說,以下放干貨眉厨。
正文
一心赶、看本文前,我默認(rèn)大家都知道http 的post缺猛、get請(qǐng)求、cookie椭符、session等
1.打開網(wǎng)站首頁(yè)荔燎,建議大家可以使用fidder抓包工具,可以很方便地看出所有請(qǐng)求和頭信息销钝。
2.啟用fidder,可以看到網(wǎng)址的請(qǐng)求已被監(jiān)聽有咨,接下來,我們開始看登陸需要提交的參數(shù)
3.點(diǎn)擊登陸蒸健,輸入用戶名和密碼座享,登陸
注意以上幾個(gè)地方婉商,action 提交實(shí)際的地址,需要輸入的用戶名和密碼的ID,以下在fidder里面均可得到驗(yàn)證
二渣叛、接下來我們使用約50行python代碼完整模擬登陸
1.聲明一些網(wǎng)站變量
? ? ? ? self.session = requests.Session()
? ? ? ? self.home_url="http://www.training-china.com/index.html"
? ? ? ? self.user_url = "http://www.training-china.com/setting/basic"
? ? ? ? self.loginurl = 'http://www.training-china.com/loginvalidate.html'
2.偽造http頭協(xié)議和post數(shù)據(jù)<代碼格式好亂>
? ? headers = {
? ? 'Proxy-Connection': 'Keep-Alive', ? ? ? ? '
? ? Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'Host': 'http://www.training-china.com',
'Referer': 'http://www.training-china.com/login.html?from=http://www.trainingchina.com/index.html'
}
postdata:
# post form data
? ? ? ? data = {
? ? ? ? ? ? "login_username": username,
? ? ? ? ? ? "login_password": password,
? ? ? ? ? ? "rememberMe": "on",
? ? ? ? ? ? "from": self.home_url,
? ? ? ? }
3.登陸丈秩,使用python3 requests可以說十分簡(jiǎn)便,一行代碼搞定
response = self.session.post(url=self.loginurl, data=data, headers=self.headers)
4.把登陸信息存儲(chǔ)為cookie淳衙,在cookie失效之前都可以直接讀取cookie登陸
self.session.cookies = http.cookiejar.LWPCookieJar(filename='NIITCookies')
self.session.cookies.save()
三蘑秽、以上基本完成了登陸過程,核心代碼不過20行箫攀,接下來優(yōu)化一些問題肠牲,封裝過程,寫一個(gè)判斷登陸方法
1.是否登陸
def isLogin(self):
? ? ? ? """
? ? ? ? 通過查看用戶個(gè)人信息來判斷是否已經(jīng)登錄
? ? ? ? 禁止重定向靴跛,否則登錄失敗重定向到首頁(yè)也是響應(yīng)200
? ? ? ? :param url: 需要登陸的固定url
? ? ? ? :return: 是否登陸bool值
? ? ? ? """
? ? ? ? login_code = self.session.get(self.user_url, headers=self.headers, allow_redirects=False).status_code
? ? ? ? if login_code == 200:
? ? ? ? ? ? return True
? ? ? ? else:
? ? ? ? ? ? return False
2.封裝完整過程
具體代碼已上傳github:niit模擬登陸
四缀雳、設(shè)置自動(dòng)任務(wù)自動(dòng)登陸
1.使用Linux的crontab命令,詳情請(qǐng)看crontab使用
簡(jiǎn)單腳本niit.sh
date
python3.6 /home/leal/Public/fuck-login/022-NIIT/niit.py
date
echo "#########################################"
設(shè)置定時(shí)任務(wù)梢睛,每天12:00執(zhí)行登陸一次
# 每天12:00自動(dòng)登陸
00 12 * * * sh /home/leal/Public/fuck-login/022-NIIT/niit.sh >>/home/leal/Public/fuck-login/022-NIIT/niitlogin.log
更新肥印,可以通過關(guān)注加好友和加入學(xué)團(tuán)獲得積分,遍歷所有用戶和學(xué)團(tuán)并加入扬绪。
后記
? ? ? ? 此外登陸之后還可以設(shè)置視頻自動(dòng)播放獲取積分竖独,感興趣的朋友可以試試。