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模拟登陆旧版正方教务系统相关推荐

  1. 我的第一个开源项目:Java爬虫爬取旧版正方教务系统课程表、成绩表

    Java爬虫爬取旧版正方教务系统课程表.成绩表 一.项目展示 1.正方教务系统 首页 2.爬虫系统 首页: 成绩查询: 课表查询: 二.项目实现 1.爬取思路描述 无论是成绩查询或课表查询亦或者其它的 ...

  2. 模拟登陆广西科技大学正方教务系统

    一.首先对登录过程进行抓包,看看需要什么数据   登录地址:教学管理信息服务平台 我们可以看到登录采用POST对http://jwxt.gxust.edu.cn:9600/xtgl/login_slo ...

  3. 安卓开发-模拟登陆上海理工大学-方正教务系统(HttpsURLConnection)

    通过HttpsURLConnection模拟登录 今天,写一下基于方正教务系统的上海理工大学教务系统,项目放在了码云,有需要的可以直接翻到最后查看 首先还是登陆一下,看看我们在登陆的时候提交了什么 火 ...

  4. 教务系统自动评教_PHP版正方教务系统一键评教(已修改BUG)

    <首先介绍大家都熟悉的JS版本> 1.拖动右边的链接到浏览器书签栏或添加到书签:一键评教脚本 2.打开教务管理系统的评教页面,进入第一个要评教的老师页面. 3.点击书签栏的"一键 ...

  5. php模拟登陆,php实现模拟登陆正方教务系统

    本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法,希望能帮助到大家. 1.保存登陆界面的验证码 ...

  6. php模拟登陆正方教务系统(2018年)

    php模拟登陆正方教务系统(2018年) 本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法. ...

  7. 用Python登陆新版正方教务系统获取课程表(及RSA加密密码实现)

    前言 最近做一个微信小程序,需要登录教务系统.提前用python尝试一下登录接口,并获取到课表打印出来. 我们学校用到新版正方教务系统,长这个样子. 相比旧版的教务系统,唯一好处是不用输入二维码方便爬 ...

  8. java模拟登录新版正方_java 模拟登陆正方教务系统

    比较懒,主要说一下思路.. 1.首先正方教务系统的验证码当你不去向服务器申请的时候,可以直接无视它不需要去输入验证码.可以通过浏览器屏蔽学校教务系统的图片就可以直接输入账号密码回车进去.. 2.通过抓 ...

  9. php正方系统抓取课表,以正方教务系统为例,用php模拟登陆抓取课表、空教室,抓取课表...

    以正方教务系统为例,用php模拟登陆抓取课表.空教室,抓取课表 课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. ...

最新文章

  1. 本周ASP.NET英文技术文章推荐[06/03 - 06/09]
  2. Ansible — 编程 — Variables
  3. fprintf函数的用法_MATLAB的21种特殊符号,总有一种你不知道的用法
  4. 如何修复会话固定漏洞_PHP安全漏洞:会话劫持,跨站点脚本,SQL注入以及如何修复它们...
  5. python 支持什么操作系统_操作系统1:什么是操作系统?
  6. 聋校计算机教学工作总结,聋校二年级数学教学工作总结
  7. xftp、xshell连接远程服务器,所选的用户密钥未在远程主机上注册
  8. activiti bpmn 安装不上_OTC弧焊工作站问题集-Win7 64位系统安装Step7 MicroWIN
  9. 统计学习方法——统计学习基础(一)
  10. 唤醒手腕Python全栈工程师学习笔记(人工智能篇)
  11. 基于MATLAB的TODA定位算法的仿真
  12. 滴滴打车2015-2016
  13. Github优秀Android开源项目,值得引用与学习(图文结合~~~)
  14. 小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
  15. 【unity学习笔记-如何给动态的人物添加碰撞体】
  16. 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数。
  17. 2.5 信道的极限容量
  18. 将阿拉伯数字转换成中文大写金额的形式
  19. M2VoC比赛论文——台湾大学
  20. C++ Virtual 完美诠释

热门文章

  1. 09年NBA全明星候选名单和投票方法
  2. C语言基础语法【1】
  3. 关于maven的plugin插件问题(踩坑)
  4. 付给铁匠的账单 数据结构
  5. PES包的PTS详解
  6. 学习HTML经历记录2
  7. 液晶面板里面有些什么配件_一张图看懂液晶面板内部结构,竟如此复杂
  8. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件
  9. opencv 级联分类器
  10. blos设置具体解释