nodejs模拟登陆旧版正方教务系统
nodejs模擬登陸舊版正方教務(wù)系統(tǒng)
- nodejs模擬登陸學(xué)校教務(wù)系統(tǒng)
- 1、分析教務(wù)系統(tǒng)地址
- 2、分析請求頭和請求數(shù)據(jù)
- 3、對Cookie、__VIEWSTATE數(shù)據(jù)的獲取
- (1)獲取cookie
- (2)獲取__VIEWSTATE
- 4、得到用戶數(shù)據(jù)開始模擬登陸
- 5、跳轉(zhuǎn)到教務(wù)系統(tǒng)個人主頁面
- 6、全部代碼
nodejs模擬登陸學(xué)校教務(wù)系統(tǒng)
因為剛進(jìn)入大一,學(xué)習(xí)了一些網(wǎng)頁設(shè)計的知識,大一寒假期間,學(xué)習(xí)了解了一些微信小程序開發(fā),并制作了登陸學(xué)校教務(wù)系統(tǒng)獲取課表的小程序,本篇文章主要講解的是舊版正方教務(wù)系統(tǒng)的模擬登陸,其他教程網(wǎng)絡(luò)上也有很多相似的教程,此教程僅供學(xué)習(xí)參考,使用的nodejs模塊為:
var request = require('request');//發(fā)送請求的模塊 var iconv = require('iconv-lite');//防止編碼錯亂的模塊 var fs = require('fs');//儲存驗證碼到本地的文件操作模塊 var readline = require('readline');//讀取用戶鍵盤輸入的模塊 var jsdom = require("jsdom");//解析網(wǎng)頁dom的模塊需要使用的請自行npm i xxxx
1、分析教務(wù)系統(tǒng)地址
學(xué)校教務(wù)系統(tǒng)的首頁為:http://218.195.117.143/
學(xué)校教務(wù)系統(tǒng)驗證碼的為:http://218.195.117.143/CheckCode.aspx
2、分析請求頭和請求數(shù)據(jù)
我們隨意在用戶名密碼驗證碼輸入欄中輸入數(shù)據(jù)點擊登陸,查詢控制臺數(shù)據(jù)如下:
分析數(shù)據(jù)我們可以發(fā)現(xiàn),我們這邊需要提供用戶名密碼驗證碼,以及__VIEWSTATE和RadioButtonList1數(shù)據(jù),在請求頭上我們正常復(fù)制,僅僅在cookie上需要進(jìn)行一些操作。
后續(xù)我通過Fiddler抓包發(fā)現(xiàn)RadioButtonList1是教務(wù)系統(tǒng)登陸界面下的學(xué)生選項,所以我們的主要問題是在于cookie、__VIEWSTATE數(shù)據(jù)的獲取
3、對Cookie、__VIEWSTATE數(shù)據(jù)的獲取
(1)獲取cookie
獲取cookie首先我們考慮登陸的時候要保證驗證碼對應(yīng)cookie,這樣我們輸入驗證碼登陸的時候保證cookie對應(yīng)驗證碼,這樣就能正常登陸了,因此我們首先創(chuàng)建cookie的全局變量,再通過request向驗證碼發(fā)送get請求保存驗證碼再保存cookie。
(2)獲取__VIEWSTATE
通過對教務(wù)系統(tǒng)網(wǎng)頁的代碼分析,我們發(fā)現(xiàn)__VIEWSTATE存在于網(wǎng)頁代碼中,所以我們在請求登陸頁面的時候通過分析網(wǎng)頁得到__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'//創(chuàng)建readline接口實例(讀取用戶輸入要先創(chuàng)建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);//輸出一下信息確認(rèn)內(nèi)容 });//獲取驗證碼并儲存到本地, 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、得到用戶數(shù)據(jù)開始模擬登陸
我們之前通過對請求的分析得到了post需要填入的數(shù)據(jù),這時候我們復(fù)制粘貼剛才的數(shù)據(jù),直接照著數(shù)據(jù)發(fā)送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');//這里是對得到的網(wǎng)頁數(shù)據(jù)進(jìn)行編碼設(shè)置console.log(buf.toString()); });我們正常運行該js,根據(jù)同目錄下生成的驗證碼輸入驗證碼信息,得到的截圖如下:
這邊其實我們可以看到以及登陸成功了,網(wǎng)頁上的信息提示我們跳轉(zhuǎn)到其他頁面,這邊我們再做一次網(wǎng)頁跳轉(zhuǎn)測試效果。
5、跳轉(zhuǎn)到教務(wù)系統(tǒng)個人主頁面
request.get({url: url+'xs_main.aspx?xh=這邊填學(xué)號', encoding: null, headers: {"Cookie": cookie} }, function (e, r, b) {var buf2 = iconv.decode(b, 'gb2312');console.log(buf2.toString()); });截圖如下:
我們翻閱過輸出的信息后發(fā)現(xiàn)確實是我們成功登錄到教務(wù)系統(tǒng)的網(wǎng)頁代碼,因此我們模擬登陸教務(wù)系統(tǒng)的功能實現(xiàn)完成!
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'//創(chuàng)建readline接口實例(讀取用戶輸入要先創(chuàng)建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);//輸出一下信息確認(rèn)內(nèi)容 });//獲取驗證碼并儲存到本地, 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": "這里輸入學(xué)號","TextBox1": '',"TextBox2": "這里輸入密碼","txtSecretCode": answers,'RadioButtonList1': '%D1%A7%C9%FA','Button1': '','lbLanguage': '','hidPdrs': '','hidsc': ''}}, function (error, response, body) {var buf = iconv.decode(body, 'gb2312');//這里是對得到的網(wǎng)頁數(shù)據(jù)進(jìn)行編碼設(shè)置console.log(buf.toString());request.get({//跳轉(zhuǎn)到教務(wù)系統(tǒng)個人主頁面url: url+'xs_main.aspx?xh=這里輸入學(xué)號', 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); });總結(jié)
以上是生活随笔為你收集整理的nodejs模拟登陆旧版正方教务系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 匕年级下册计算机计划,七年级下学期班主任
- 下一篇: 模拟登陆广西科技大学正方教务系统