NodeJs模拟登陆正方教务

yizhihongxing

下面是“NodeJs模拟登陆正方教务”的完整攻略:

一、前置准备

在开始NodeJs模拟登陆正方教务之前,我们需要保证以下几点:

  1. 学校教务系统平台支持模拟登陆,常见的支持教务系统有“正方教务系统”、“智慧校园”等;
  2. 获取学校教务系统的账号和密码,以进行模拟登陆;
  3. 安装NodeJs开发环境和npm包管理工具,以便安装相关插件。

二、安装必要插件

模拟登陆正方教务需要用到request、cheerio、iconv-lite等插件,这些插件可以通过npm包管理工具进行安装。

具体命令如下:

npm install request cheerio iconv-lite --save

三、实现模拟登陆

实现模拟登陆正方教务主要涉及以下几个步骤:

1. 获取登陆页面

使用request插件发送请求获取登陆页面,代码示例如下:

var request = require('request');

var url = 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html';

request.get({
  url: url,
  headers: {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
  },
  encoding: null
}, function (err, response, body) {
  if (err) {
    console.error(err);
    return;
  }
  if (response.statusCode === 200) {
    var html = iconv.decode(body, 'GBK');
    console.log(html);
  }
});

2. 提取表单数据

从登陆页面获取到表单数据,一般是包含表单元素的html。使用cheerio插件可以轻松提取表单元素的data值,代码示例如下:

var cheerio = require('cheerio');

var $ = cheerio.load(html);
var form = $('form#fm1');

var formdata = {};
form.find('input').each(function (index, element) {
  var input = $(element);
  formdata[input.attr('name')] = input.attr('value') || '';
});

3. 发送登陆请求

将刚才提取的表单数据发送给服务器验证登陆信息,代码示例如下:

var request = require('request');
var iconv = require('iconv-lite');

var url = 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html';

var formdata = {
  'yhm': 'YourUsername',
  'mm': 'YourPassword',
  'mm': '',
};

request.post({
  url: url,
  headers: {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
    'Referer': 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html'
  },
  encoding: null,
  form: formdata
}, function (err, response, body) {
  if (err) {
    console.error(err);
    return;
  }
  if (response.statusCode === 200) {
    var html = iconv.decode(body, 'GBK');
    console.log(html);
  }
});

四、示例说明

下面分别通过建立session和使用jsonwebtoken的方式实现模拟登陆正方教务的过程。

1. 示例一:建立session

const request = require('request');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');

let j = request.jar();

const loginOptions = {
  url: 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html',
  jar: j,
  encoding: null,
  headers: {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
  }
};

let courseId = '';

const user = {
  username: 'YourUsername',
  password: 'YourPassword'
};

request(loginOptions, (err, response, body) => {
  const $ = cheerio.load(iconv.decode(body, 'GBK'));
  const inputList = $('form.login-form').eq(0).find('input[type="hidden"]');
  const params = {
    yhm: user.username,
    mm: user.password,
  };
  inputList.each((i, ele) => {
    const thisEle = $(ele);
    params[thisEle.attr('name')] = thisEle.attr('value');
  });
  const options = {
    url: 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html',
    jar: j,
    encoding: null,
    headers: {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
      'Referer': 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html'
    },
    formData: params,
  };
  request.post(options, (err, response, body) => {
    const $ = cheerio.load(iconv.decode(body, 'GBK'));
    courseId = $('a').eq(0).attr('href').split('=')[1];
    setTableList();
  });
});

2. 示例二:使用jsonwebtoken

const request = require('request');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');
const jwt = require('jsonwebtoken');

const user = {
  username: 'YourUsername',
  password: 'YourPassword'
};

const options = {
  url: 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html',
  encoding: null,
  headers: {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
  }
};

request(options, (err, response, body) => {
  const $ = cheerio.load(iconv.decode(body, 'GBK'));
  const inputList = $('form.login-form').eq(0).find('input[type="hidden"]');
  const params = {
    yhm: user.username,
    mm: user.password,
  };
  inputList.each((i, ele) => {
    const thisEle = $(ele);
    params[thisEle.attr('name')] = thisEle.attr('value');
  });
  const rsaModulus = params.rsaModulus;
  const exponent = '10001';
  const key = new Buffer(rsaModulus, 'base64').toString();
  const password = new Buffer(params.mm).toString('base64');
  const rsa = jwt.sign({
    "sub": user.username,
    "iat": Math.floor(Date.now() / 1000) - 30,
    "exp": Math.floor(Date.now() / 1000) + (60 * 60),
  }, key, {
    algorithm: 'RS256',
    header: {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "rsa1"
    }
  });
  const options = {
    url: 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html',
    encoding: null,
    headers: {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
      'Referer': 'http://your.edu.cn/jwglxt/xtgl/login_slogin.html'
    },
    form: {
      yhm: user.username,
      mm: password,
      "yzm": '',
      "mm": rsa,
    }
  };
  request.post(options);
});

以上就是NodeJs模拟登陆正方教务的完整攻略,通过上述步骤和示例代码可以成功实现登陆操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJs模拟登陆正方教务 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Vue.js3.2的vnode部分优化升级使用示例详解

    Vue.js3.2的vnode部分优化升级使用示例详解 简介 在Vue.js 3.2版本中,vnode相关的部分进行了优化升级。利用这些更新,可以优化Vue.js的性能表现。本文将详细讲解Vue.js的vnode优化升级,并提供几个使用示例。 vnode优化升级 在Vue.js 3.2版本中,vnode的处理更快。它现在可以将创建新vnode所需的时间降低了…

    node js 2023年6月8日
    00
  • node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)

    下面我将为大家讲解“node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)”的完整攻略。 什么是node.js基于cheerio的爬虫工具? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以在服务器端运行 JavaScript 代码。Cheerio 是 Node.js 中一个非常流行的小型解…

    node js 2023年6月9日
    00
  • 详解在node.js中require方法的加载规则

    当在Node.js中调用require()方法时,Node.js会按照一定的加载规则进行模块的加载。本文将详细讲解Node.js中require()方法的加载规则。 基本概念 在讲解require()方法的加载规则之前,需要先说明以下几个概念: 模块:在Node.js中,每个文件都被看作一个模块,模块可以导出(export)和导入(import)。当代码需要…

    node js 2023年6月8日
    00
  • Node.js如何对SQLite的async/await封装详解

    Node.js对SQLite的async/await封装可以帮助开发者更方便地在Node.js应用中使用SQLite数据库,同时也避免了回调地狱的问题。下面将详细介绍Node.js对SQLite的async/await封装的攻略。 1. 安装依赖库 使用Node.js对SQLite进行async/await封装,需要安装以下依赖库:- sqlite3模块:用…

    node js 2023年6月8日
    00
  • ESLint和Jest中使用esm示例详解

    ESLint和Jest中使用esm示例详解 简介 ESLint是一个开源的JavaScript代码检查工具,它的目标是保证代码的一致性和避免错误。ESLint支持插件,我们可以使用它来编写自定义规则,以便强制执行代码的有效性和可读性。 Jest是一个流行的JavaScript测试框架,可用于测试React、Vue等前端框架以及Node.js应用程序等等,其功…

    node js 2023年6月8日
    00
  • 关于vue的npm run dev和npm run build的区别介绍

    下面是关于 Vue 的 npm run dev 和 npm run build 的区别介绍的完整攻略。 一、npm run dev 和 npm run build 的作用 npm run dev 和 npm run build 都是 Vue CLI 项目中的常用命令,它们各自有着不同的作用: npm run dev:启动本地开发服务器,实时编译和热更新代码,…

    node js 2023年6月9日
    00
  • Windows8下搭建Node.js开发环境教程

    下面是“Windows8下搭建Node.js开发环境教程”的完整攻略: Windows8下搭建Node.js开发环境教程 1. 安装Node.js 首先需要从官网下载Node.js安装包,下载地址:https://nodejs.org/en/download/。 下载完成后双击安装包,根据提示进行安装。安装完成后,打开命令行窗口(可以按下Win+R键,然后输…

    node js 2023年6月8日
    00
  • Node.js API详解之 assert模块用法实例分析

    首先我想解释一下Node.js中的assert模块。assert模块是Node.js中的一个断言库,用于编写单元测试,以及在开发过程中提供运行时验证代码的便利方式。 在使用assert模块时,可以在代码中插入断言,如果这些断言不成立,则会抛出一个AssertionError错误,并指出哪个断言失败了。assert模块的API包含了各种不同类型的断言,例如st…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部