學校平臺的模擬登陸和相關操做

寫在最前:互聯網並不是法外之地,爬蟲僅供技術交流html

運行環境前端

  • python 3.7.4
  • requests 2.10.0

此次想分享一下關於學校教務,教學平臺,以及學校公衆號上面的web應用如何模擬登陸。爲了學校服務器的安全,本篇隨筆不會曝光太多關於本校的信息,也不公佈具體的代碼,有意願交流技術的能夠繼續看哦。python

我以爲掌握相應的技術去作一些自動化的東西無可厚非。但前提是對其餘人的權益仍是要尊重的,對學校的服務器也要量其力而行的。web

咱們學校師生服務平臺的一些狀況

咱們學校之前的教務和教學平臺是由優慕課提供的技術支持。教學平臺有一個比較一言難盡的地方就是它下載課件是不能全選下載的,並且每個課件都必須點進預覽頁面再點下載。因此我以前就寫了腳本讓他一次性下載,就比較方便一些。數據庫

而後還有一點比較坑的就是因爲第三方的平臺比較多,密碼也比較多,有的同窗應該深有體會。json

後來咱們學校的登陸終於改用統一認證了。除了老教學平臺,基本均可以採用統一的密碼。如今新的教務由金智教育提供技術支持。新教務其它的不說,界面確實好看多了。目前存在的一些bug也是學校數據庫對接的問題。後端

而後關於圖書館,疫情回來後,咱們學校的圖書館須要在線預定了。原本咱們圖書館就有一個公衆號,此次是在公衆號上添加一個web應用來給咱們預定座位,技術支持是利昂軟件。不過體驗感不怎麼樣,本身就寫了自動化的腳本去預定座位。瀏覽器

大體的介紹

咱們學校的這些系統大部分採用的都是session來鑑權。流程就是在服務端開闢一個session,session裏面放相應的我的信息,而後把session的標識jsessionid傳到前端存到cookie裏面。每次請求的時候再帶上,到對應的session裏面取到我的信息後到對應的數據表裏面作操做。安全

因此爬取的流程就都是同樣的啦,先模擬登陸得到jsessionid,而後就能夠用這個jsessionid作不少你在網頁端能夠作的事情。服務器

插入一段對selenium的評價

咱們以前爬蟲課的老師推薦了selenium用來作模擬登陸,可是我使用事後仍是很想吐槽一下它。

從爬蟲的角度來講,若是滿分是10星,selenium我我的以爲給個2星。

  • 不推薦selenium的第一個點——只要本身對http協議的理解夠深,requests是能夠實現和selenium同樣強大的功能的。

    在知乎上曾經看過有人問這樣的問題。

    py爬蟲的話,selenium是否是能徹底取代requests?

    既然二者均可以直接get到源碼,requests只能爬靜態頁面,而selenium不但能得到js動態給出的源碼,模擬真實登陸也減小了反爬的限制。

    其實模擬登陸這些requests是能夠作的,動態的東西分析接口也是能夠爬的。並且requests其實能夠更靈活地隱藏本身,selenium其實更容易被反爬。

  • 不推薦selenium的第二個點——selenium不適合爬蟲,更適合測試。

    selenium這個東西它原本的定位也是web自動化測試工具,拿來測試無疑是一個利器。可是在爬蟲方面,它沒法過濾過多的冗餘信息,並且拖着瀏覽器內核在跑,效率十分低下。

  • 不推薦selenium的第三個點——用selenium不如用js腳本。

    若是說確實遇到了requests解決不了的問題,不得不採用拖着瀏覽器來跑的方法,那爲何不使用js腳本。selenium的核心部分其實也是用js來寫的。並且用js腳本纔是躲避反爬機制更科學的方法。

咱們學校統一認證的登陸接口

咱們學校有兩種認證方法,一種是帳號密碼,一種是手機號驗證碼。

帳號密碼流程

  1. 用戶每次向登陸界面發送get請求時,都會返回相應的html文檔,其中會帶一個名爲lt的隨機變量。

  2. 前端得到用戶輸入的帳號密碼後,結合lt進行des加密。

  3. 組合成json格式的數據post給後端。

  4. 後端接收後開闢一塊session空間,存的應該是咱們的學號和姓名,而後返回jsessionid給前端。

  5. 前端將jsessionid存在cookie裏,至此登錄成功。

  6. session咱們學校是用安全退出來close的,至此退出成功,它具體能夠保存的最大時間是多長,我卻是沒有試過。

每次看到安全退出我都挺想笑的,這是在說直接關閉瀏覽器或者窗口是不安全的。可是安全這個詞真的很難有警示做用,就像安全帽同樣,我以爲改爲防危險帽可能戴的人就多了。

手機驗證碼流程

  1. 咱們學校採用的是學號做爲用戶,經過學號去後端拿手機號而且發送短信。
  2. 前端得到用戶輸入的帳號和驗證碼後,結合lt進行des加密。後面就跟帳號密碼流程是同樣的啦。

咱們學校老教務和教學平臺的登陸接口

老教務和教學平臺的登陸也差很少,並且更簡單。老教務和教學平臺帳號密碼的傳輸還更不安全,用的http協議,傳的仍是明文。

雖然老教務要驗證碼登陸,可是它的驗證碼識別很是簡單,用沒有通過再訓練的pytesseract就能夠達到很高的識別率。

上圖給你們感覺一下:

img

咱們學校圖書館公衆號的web應用

原本我是想本身去作一個公衆號的web應用去嵌入公衆號裏面來作一些嘗試的,而後更好地跟你們分享這個過程,可是奈何我只是個我的帳戶。

可是咱們學校圖書館的這個預定座位的web應用也是很容易分析的。雖說它不讓咱們經過瀏覽器打開啊。但仍是有兩種方式能夠來分析啊。

image-20201010105045617

  • 一種是用抓包工具。

  • 另外一種就是天下武功,惟快不破了。你只要足夠快,在瀏覽器符號變灰以前點中它,就能夠在瀏覽器端打開啊。但這個方法並非通用方法啊,有一些web應用後端還會作其它鑑權,因此在瀏覽器不必定打得開。並且我也不太清楚這是否是隻是微信mac端的bug啊。

    image-20201010105105437

反正抓包確定是沒有問題的。

咱們圖書館的連接是個久鏈,對於每一個用戶來講,就只有sn不同,openid在得到sn後就是個擺設。因此只要拿到任意一我的在咱們學校圖書館公衆號的sn,就能夠用他的帳號作相應的操做。

咱們學校搶後天座位的時間是天天早上7點,因此我就把搶課腳本放在服務器上去跑。否則還要設置電腦自動開機,還要讓電腦免密登錄,太不安全了。

此次也算是對學校用的第三方產品作一個比較吐槽吧。

相關文章
相關標籤/搜索