如何用Python優(yōu)雅的登錄校園網(wǎng)?
今天這篇文章的思路來(lái)源于校園網(wǎng),很多的校園網(wǎng)在每次連接時(shí)都需要進(jìn)入一個(gè)網(wǎng)址進(jìn)行登錄,這個(gè)步驟真的是非常非常的麻煩(大學(xué)生都懂~)。所以這次來(lái)教大家如何實(shí)現(xiàn)一鍵登錄校園網(wǎng)。
一鍵登錄校園網(wǎng)
首先我們來(lái)看下整個(gè)的流程。首先需要進(jìn)行網(wǎng)絡(luò)連接,連接之后會(huì)跳轉(zhuǎn)到一個(gè)網(wǎng)址,也就是校園網(wǎng)登錄的網(wǎng)址。

然后輸入賬號(hào)密碼登錄。
我們需要做到的效果就是點(diǎn)擊一個(gè)可執(zhí)行文件然后實(shí)現(xiàn)校園網(wǎng)的自動(dòng)登錄。(這里的可執(zhí)行文件在mac中為excu文件、win中為exe)
我們首先解決如何通過(guò)Python進(jìn)行登錄,然后再解決打包的問(wèn)題。
其實(shí)對(duì)于Python的登錄,會(huì)爬蟲(chóng)的朋友應(yīng)該很快就知道直接通過(guò)requests進(jìn)行表單提交即可。
首先,我們抓包獲取校園網(wǎng)登錄提交表單的地址:

同時(shí),我們也拿到需要提交的表單格式,有些學(xué)校的校園網(wǎng)可能需要通過(guò)驗(yàn)證碼驗(yàn)證,一般不會(huì)有很復(fù)雜的驗(yàn)證方式,如果需要驗(yàn)證,那么需要去破解一下驗(yàn)證碼,https://github.com/hellokuls/cnnyzm。這里給出我之前寫(xiě)的驗(yàn)證碼破解案例。

拿到了之后就好辦了,直接post模擬提交就行了,這里我給出我所寫(xiě)的代碼,基本的邏輯都是差不多,大家只需要改成自己學(xué)校的相關(guān)信息就可以了。
#?encoding:?utf-8
import?requests
#?檢查是否連接入校園網(wǎng)
def?checkinternet():
????url?=?'xxxxxxxxxxxxxxxxxxxxxx'??#校園網(wǎng)登錄的地址,用來(lái)測(cè)試是否連接校園網(wǎng)?
????try:
????????code?=?requests.get(url,?timeout=5).status_code
????????if?code?!=?200:
????????????print('沒(méi)有網(wǎng)絡(luò)哦~')
????????????return?0
????????elif?code?==?200:
????????????return?1
????????else:
????????????return?2
????except:
????????return?2
def?login(username,?password):
????url?=?'xxxxxxxxxxxxxxxxxx'?#?校園網(wǎng)表單提交url
????postdata={
????????'action':?'login',
????????'ac_id':?1,
????????'user_ip':'',
????????'nas_ip':'',
????????'user_mac':'',
????????'username':?username,
????????'password':?password,
????????'save_me':?'0',
????????'ajax':?1
????}
????res?=?requests.post(url,?data=postdata)
????res.encoding?=?res.apparent_encoding
????res?=?res.text
????if?'login?ok'?in?res:??#?如果存在該字段
????????res?=?"登錄成功!"
????????return?res
????if?'5分鐘'?in?res:??#?多次錯(cuò)誤提交可能會(huì)導(dǎo)致賬戶鎖定5分鐘
????????print("登錄失?。?)
????????return?res
????if?'E2620'?in?res:???#?此處是賬號(hào)已經(jīng)在別的設(shè)備登錄的情況,先注銷然后再次登錄
????????logout(url,?username,?password)
????????return?login(username,?password)
????return?res
#?退出當(dāng)前賬號(hào)的登錄
def?logout(url,?username,?password):
????logout_data?=?{
????????'action':?'logout',
????????'username':?username,
????????'password':?password,
????????'ajax':?1
????}
????res1?=?requests.post(url,?data=logout_data)
????res1.encoding?=?res1.apparent_encoding
????res1?=?res1.text
????print("賬戶已退出!")
if?__name__?==?'__main__':
????status?=?checkinternet()
????if?status?==?0:
????????txt?=?login(xxxxx,?xxxxxxxx)?#?輸入賬號(hào)密碼
????????print(txt)
????elif?status?==?1:
????????print("有網(wǎng)絡(luò)!")
????????txt?=?login(xxxxxxx,?xxxxxxx)
????????print(txt)
????else:
????????print("未知結(jié)果!")
講解完了代碼部分,我們?cè)撊绾螌⑺虬梢粋€(gè)可執(zhí)行文件直接通過(guò)點(diǎn)擊就可以進(jìn)行聯(lián)網(wǎng)呢?
這里推薦一個(gè)庫(kù)---pyinstaller
pip?install?pyinstaller
這個(gè)庫(kù)能夠?qū)y文件直接打包成可執(zhí)行文件,支持win/mac/linux平臺(tái)。
當(dāng)我們寫(xiě)完文件后執(zhí)行下面命令:
pyinstaller?-F?文件名.py
執(zhí)行完后,我們可以看到生成了幾個(gè)文件夾,而可執(zhí)行文件就在dist文件夾中。

放在桌面上,每次連接直接點(diǎn)擊一下就可以連接校園網(wǎng)了~
推薦:
長(zhǎng)按關(guān)注公眾號(hào)
每天分享python技術(shù)干貨
