說在前面的廢話: 又開學了,我要好好學習,想找個空教室自習真不容易(雖然有書院,可是人多啊,找個沒人的教室自習多好~),一樓一樓的往上找教室,就算我不以爲麻煩,可是小姐姐(基友)也會以爲麻煩),因此( 攤手)。html
想到兩種方法:python
1:先經過谷歌抓包,得到全部校區教學樓上課的課表,而後本身寫個小程序自動判斷下,而後彙總。缺點若是教務系統更新了,原來的就不能用了(課表都變了,你還咋用233333)web
2:仍是先分析各個數據包,而後模擬登陸教務系統(非pyautogui,而是使用session模擬瀏覽器),而後發送特定數據包,得到課表,再統計輸出,實時得到最新信息(若是教務系統上出錯,那我也無奈啊)小程序
爲了讓小姐姐(基友)有更好的使用體驗,確定選擇第二種啦~瀏覽器
百度直接搜到的網址須要驗證碼,可是有個不須要驗證碼的(這就很爽了)點擊這裏進入登陸服務器
一、 分析登陸網頁cookie
先打開F12 點擊Network,先本身登陸走一遍,發現它直接跳轉到了教務系統裏面,session
咱們找到LoginToXk這個數據包,注意框框裏面的是加密後的數據,也就是咱們須要讓服務器認證的東西。app
固然這個數據是(帳號密碼)被加密後再發送的,因此咱們再退到登陸頁面。函數
進入登陸頁面後,點擊右鍵,檢查。
咱們發現咱們點了登陸那個按鈕後,會先通過一個JS處理,就是submitForm1()這個,而後把加密後的東西 傳送給咱們上面找到的LoginToXk這個數據包。
把這個代碼展開,咱們找到這個方法,再最下面。
大概看下代碼,加密在這兩個地方
encodeInp(xh);
encodeInp(pwd);
咱們經過瀏覽器自帶的search 查找,發現這個加密函數在另一個JS裏面,順藤摸瓜。
從新看下登陸界面的數據包,找到conwork.js 咱們看下如如何加密的。
恩,有點麻煩,怎麼辦。。。。
模擬加密,寫了開頭,既然它有加密的JS,我爲啥不直接用?我用的是python!問下度年,發現
import execjs
能夠直接調用本地的js 而後得到返回的信息,nice! 咱們先把這個JS保存在本地。
而後寫個調用js加密,而後返回結果的函數,注意顯示帳號加密,而後中間有三個%,而後再接密碼加密。
加密搞定。
而後咱們模擬LoginToXk,發送數據包,這裏咱們須要有個cookies,cookies並且這個cookies 在全局都有用。
cookie在進入登陸頁面就會自動給你分配。因此咱們先得到cookies.
而後發送咱們驗證
這樣咱們的cookies 就能夠經過教務系統的登陸驗證了
找到教室課表查詢,這兩個參數必須選擇。
點擊查詢,教務系統比較爛,相應的慢,233333.
找到這個/kbxx_classroom_ifr數據包,再看下Preview信息。
沒錯就是表格形式的。
既然是表格信息,咱們直接保存爲csv格式,而後在處理。
緣由:教務系統響應太慢,對小姐姐(基友)不友好,其次,表格我就更新一次,確保偏差在可控範圍。
表格處理咱們是用pandas 這個庫就行了
import pandas as pd
得到教室信息代碼保存爲csv代碼:
而後就是簡單空教室判斷和查詢了,一個一個的查看是否爲空,是的話記錄教室,不然跳過。
時間緣由就很少闡述了,我封裝成了一個類,你們能夠直接調用,注意記得把加密的JS文件放在目錄下,或者你寫絕對路徑。