Python使用splinter自動登錄教務系統查詢並計算成績(CUMT新版教務系統)

礦大2017年使用的是新版的教務系統,提交的密碼是經過js加密的。

雖然我最後找到了加密的文件,可是js沒有學過,看了半天硬是沒看懂。

最後渣渣只能另找辦法了,最後發現了一個神器splinter。這個庫的使用我就不再贅述了,簡單介紹一下我是怎麼實現登錄的

#loginfrom splinter.browser import Browserclass Login(object): def __init__(self): self.txtUserName = ****** #用戶名 self.TextBox2 = ****** #密碼 self.txtSecretCode = #驗證碼 def submit(self): b = Browser(driver_name="chrome") b.visit("http://202.119.206.62/jwglxt/xtgl/login_slogin.html") b.fill("yhm", self.txtUserName) b.fill("mm", self.TextBox2) button = b.find_by_id(dl) button.click() cookie = JSESSIONID + = + b.cookies[JSESSIONID] #cookie的構成 return cookie

這樣就完成登錄了,並拿到了登錄後的cookie,接下來就是爬取成績頁面和計算成績了。

首先是各個庫的引用和實例一個login對象

import requestsimport jsonimport xlwtfrom login import Loginlogin = Login()

因為是非同步載入的,所以拿到的是json數據,轉化成字典後使用

url = http://202.119.206.62/jwglxt/cjcx/cjcx_cxDgXscj.html?doType=query&gnmkdm=N305005&queryModel.showCount=100&queryModel.currentPage=1&queryModel.sortName=&queryModel.sortOrder=asc&time=0postData = { # xnm: "2016", #學年開始的年份 # xqm: "12", #對應第幾學期,3表示第一學期,12是第二學期}headers = { cookie: login.submit(), #cookie值是臨時獲得生成的 user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36}r = requests.post(url, headers = headers, data=postData)js = json.loads(r.text)

這裡的postdata可以修改,選擇那個學年哪個學期,我這裡是導入整個大一大二的,所以直接注釋掉了,headers中可以拿到前面登錄過的cookie訪問成績查詢頁面。

然後寫入到excel文件中

sheet1.write(0, 0, 科目)sheet1.write(0, 1, 成績)sheet1.write(0, 2, 學分)sheet1.write(0, 3, 績點)print(js[items][0][xm], js[items][0][bj])print("所有科目共有{}條記錄".format(len(js[items])))count = 0jqCj = []tplt = "{:^6} {:^6} {:^6} {:^20}"print(tplt.format( "學分", "成績", "績點", "科目"))for infor in js[items]: if infor[kcxzmc] != "通識教育公選課" and infor[kcxzmc] != "素質教育課": if infor[cj] == 良好: infor[cj] = 80 elif infor[cj] == 優秀: infor[cj] = 90 print(tplt.format( infor[xf], infor[cj], infor[jd], infor[kcmc])) jqCj.append([float(infor[xf]), float(infor[cj]), float(infor[jd])]) sheet1.write(count, 0, infor[kcmc]) sheet1.write(count, 1, infor[cj]) sheet1.write(count, 2, infor[xf]) sheet1.write(count, 3, infor[jd]) count += 1

最後的計算我就不說了。。。2333

貼一下整個過程中的幾張截圖:

1.首先是自動登錄

2.然後是列印成績和計算成績

成績不好,大家看看就行。

完整代碼在我的github上實現教務系統的成績查詢以及加權平均分和加權績點計算(中國礦業大學)。謝謝!


推薦閱讀:

【Python爬蟲實戰】——爬取今日頭條美女圖片
從零開始寫Python爬蟲 --- 爬蟲應用:一號店 商品信息查詢程序
新媒體人必會的傻瓜式爬蟲工具:上手 Web Scraper 的 5 個步驟
Scrapy抓手機App數據(今日頭條)
深入剖析拉勾網,小白也來玩數據(一)

TAG:Python | 爬虫 | 中国矿业大学 |