日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

      歡迎訪問 生活随笔!

      生活随笔

      當前位置: 首頁 > 运维知识 > windows >内容正文

      windows

      nodejs模拟登陆旧版正方教务系统

      發布時間:2024/3/12 windows 38 豆豆
      生活随笔 收集整理的這篇文章主要介紹了 nodejs模拟登陆旧版正方教务系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

      nodejs模擬登陸舊版正方教務系統

      • nodejs模擬登陸學校教務系統
        • 1、分析教務系統地址
        • 2、分析請求頭和請求數據
        • 3、對Cookie、__VIEWSTATE數據的獲取
          • (1)獲取cookie
          • (2)獲取__VIEWSTATE
        • 4、得到用戶數據開始模擬登陸
        • 5、跳轉到教務系統個人主頁面
        • 6、全部代碼

      nodejs模擬登陸學校教務系統

      因為剛進入大一,學習了一些網頁設計的知識,大一寒假期間,學習了解了一些微信小程序開發,并制作了登陸學校教務系統獲取課表的小程序,本篇文章主要講解的是舊版正方教務系統的模擬登陸,其他教程網絡上也有很多相似的教程,此教程僅供學習參考,使用的nodejs模塊為:

      var request = require('request');//發送請求的模塊 var iconv = require('iconv-lite');//防止編碼錯亂的模塊 var fs = require('fs');//儲存驗證碼到本地的文件操作模塊 var readline = require('readline');//讀取用戶鍵盤輸入的模塊 var jsdom = require("jsdom");//解析網頁dom的模塊

      需要使用的請自行npm i xxxx

      1、分析教務系統地址

      學校教務系統的首頁為:http://218.195.117.143/
      學校教務系統驗證碼的為:http://218.195.117.143/CheckCode.aspx

      2、分析請求頭和請求數據

      我們隨意在用戶名密碼驗證碼輸入欄中輸入數據點擊登陸,查詢控制臺數據如下:

      分析數據我們可以發現,我們這邊需要提供用戶名密碼驗證碼,以及__VIEWSTATE和RadioButtonList1數據,在請求頭上我們正常復制,僅僅在cookie上需要進行一些操作。

      后續我通過Fiddler抓包發現RadioButtonList1是教務系統登陸界面下的學生選項,所以我們的主要問題是在于cookie、__VIEWSTATE數據的獲取

      3、對Cookie、__VIEWSTATE數據的獲取

      (1)獲取cookie

      獲取cookie首先我們考慮登陸的時候要保證驗證碼對應cookie,這樣我們輸入驗證碼登陸的時候保證cookie對應驗證碼,這樣就能正常登陸了,因此我們首先創建cookie的全局變量,再通過request向驗證碼發送get請求保存驗證碼再保存cookie。

      (2)獲取__VIEWSTATE

      通過對教務系統網頁的代碼分析,我們發現__VIEWSTATE存在于網頁代碼中,所以我們在請求登陸頁面的時候通過分析網頁得到__VIEWSTATE即可。

      獲取cookie和__VIEWSTATE代碼如下(代碼中有使用readline模塊讀取用戶輸入驗證碼):

      var request = require('request') var iconv = require('iconv-lite') var fs = require('fs') var readline = require('readline'); const jsdom = require("jsdom");let url = 'http://218.195.117.143/' let url2 = 'http://218.195.117.143/CheckCode.aspx'//創建readline接口實例(讀取用戶輸入要先創建readline接口實例) var rl = readline.createInterface({input: process.stdin,output: process.stdout });var cookie = '';; var __VIEWSTATE = ''; var answers = '';//驗證碼//獲取__VIEWSTATE request(url, function (error, response, body) {var arr = body.split('"');__VIEWSTATE = arr[119];//這邊因為懶得去解析dom,干脆取巧直接解析字符串獲取console.log('__VIEWSTATE是:' + __VIEWSTATE);//輸出一下信息確認內容 });//獲取驗證碼并儲存到本地, let stream = fs.createWriteStream("./code.jpg");request(url2, function (error, response, body) {cookie = response.headers["set-cookie"][0];//這邊通過response得到cookierl.question("請輸入驗證碼:", function (answer) {answers = answer;//這邊得到用戶輸入的驗證碼}); }).pipe(stream).on('close', function () {console.log(cookie); });

      4、得到用戶數據開始模擬登陸

      我們之前通過對請求的分析得到了post需要填入的數據,這時候我們復制粘貼剛才的數據,直接照著數據發送post請求(post請求部分代碼如下):

      request.post({url: url, headers: {"Cookie": cookie}, encoding: null, form: {"__VIEWSTATE": __VIEWSTATE,"txtUserName": "這邊輸入賬號","TextBox1": '',"TextBox2": "這邊輸入密碼","txtSecretCode": answers,'RadioButtonList1': '%D1%A7%C9%FA','Button1': '','lbLanguage': '','hidPdrs': '','hidsc': ''} }, function (error, response, body) {var buf = iconv.decode(body, 'gb2312');//這里是對得到的網頁數據進行編碼設置console.log(buf.toString()); });

      我們正常運行該js,根據同目錄下生成的驗證碼輸入驗證碼信息,得到的截圖如下:

      這邊其實我們可以看到以及登陸成功了,網頁上的信息提示我們跳轉到其他頁面,這邊我們再做一次網頁跳轉測試效果。

      5、跳轉到教務系統個人主頁面

      request.get({url: url+'xs_main.aspx?xh=這邊填學號', encoding: null, headers: {"Cookie": cookie} }, function (e, r, b) {var buf2 = iconv.decode(b, 'gb2312');console.log(buf2.toString()); });

      截圖如下:

      我們翻閱過輸出的信息后發現確實是我們成功登錄到教務系統的網頁代碼,因此我們模擬登陸教務系統的功能實現完成!

      6、全部代碼

      var request = require('request') var iconv = require('iconv-lite') var fs = require('fs') var readline = require('readline'); const jsdom = require("jsdom");let url = 'http://218.195.117.143/' let url2 = 'http://218.195.117.143/CheckCode.aspx'//創建readline接口實例(讀取用戶輸入要先創建readline接口實例) var rl = readline.createInterface({input: process.stdin,output: process.stdout });var cookie = '';; var __VIEWSTATE = ''; var answers = '';//驗證碼//獲取__VIEWSTATE request(url, function (error, response, body) {var arr = body.split('"');__VIEWSTATE = arr[119];//這邊因為懶得去解析dom,干脆取巧直接解析字符串獲取console.log('__VIEWSTATE是:' + __VIEWSTATE);//輸出一下信息確認內容 });//獲取驗證碼并儲存到本地, let stream = fs.createWriteStream("./code1.jpg");request(url2, function (error, response, body) {cookie = response.headers["set-cookie"][0];//這邊通過response得到cookierl.question("請輸入驗證碼:", function (answer) {answers = answer;//這邊得到用戶輸入的驗證碼request.post({url: url, headers: {"Cookie": cookie}, encoding: null, form: {"__VIEWSTATE": __VIEWSTATE,"txtUserName": "這里輸入學號","TextBox1": '',"TextBox2": "這里輸入密碼","txtSecretCode": answers,'RadioButtonList1': '%D1%A7%C9%FA','Button1': '','lbLanguage': '','hidPdrs': '','hidsc': ''}}, function (error, response, body) {var buf = iconv.decode(body, 'gb2312');//這里是對得到的網頁數據進行編碼設置console.log(buf.toString());request.get({//跳轉到教務系統個人主頁面url: url+'xs_main.aspx?xh=這里輸入學號', encoding: null, headers: {"Cookie": cookie}}, function (e, r, b) {var buf2 = iconv.decode(b, 'gb2312');console.log(buf2.toString());});});}); }).pipe(stream).on('close', function () {console.log(cookie); });

      總結

      以上是生活随笔為你收集整理的nodejs模拟登陆旧版正方教务系统的全部內容,希望文章能夠幫你解決所遇到的問題。

      如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。