使用javascript实现教务系统自动选课

本文介绍了如何使用JavaScript编写脚本来自动选课,包括获取选课链接、处理确认弹窗和延时操作。作者还提到可能的进阶方案——结合Selenium和Python进行抢课功能的开发。
摘要由CSDN通过智能技术生成


前言

这个是当时选课的时候写的一个小脚本,距离现在已经过去个把月了,今天抽时间整理一下,顺便理一下思路,有需要的同学可以下载使用,使用之前请看说明。


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么选JavaScript?

JavaScript是可以运行在浏览器的一种编程语言,JavaScript编写的第三方库扩展了其功能和语法。 例如, jQuery被广泛使用,经过了实战测试,它为通过JavaScript识别和操纵事物的方式增加了很大的灵活性。

二、分析选课步骤

  1. 选择课程元素
  2. 选择确认元素
  3. 点击确认弹窗
  4. 提交

这里提几个过程中比较重要的点,

 // 获取选课链接元素
var selectCourseLink = document.querySelector('a[href="/eams/stdElectCourse.action"]');  选课
selectCourseLink.click();
 // 进入选课链接
var enterCourseLink = document.querySelector('a[target="elect_page"]');       进入选课系统
enterCourseLink.click();
//一定要加延时,加延时,加延时!!!!!  
起初在写代码过程中没有在意这个环节,也是在这里出现了一个小插曲,因为js加载速度比较快,网页元素还没加载出来!
参考:https://bbs.tampermonkey.net.cn/thread-1342-1-1.html
//我感觉当时比较难的一个点
//选择课程之后会弹出一个confirm弹窗弹窗,必须点击弹窗中的确定按钮才能完成选课,但是confirm弹窗弹窗是浏览器自带的弹窗,弹出之后页面的js代码就无法执行了,当时也很难受,好在搜索一番后,发现有文章写过这个,点赞!
参考:https://www.sunzhongwei.com/lighting-automatically-hang-tampermonkey-click-alert-popups-confirm-button

所以就是经过大概以上的过程之后,写了以下的代码,感觉不咋的,但是该有的功能确实是有了
为了方便其他人修改,在源代码前加上注释

代码如下:

// ==UserScript==
// @name         河南理工大学教务系统自动选课
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  自动选课
// @author       respect-H
// @include      https://zhjw.hpu.edu.cn/*
// @icon         https://h5.cyol.com/special/daxuexi/ck6hfr2g0y/images/loading.gif
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
 setTimeout(()=>{
    document.querySelector('a[href="/eams/stdElectCourse.action"]').click();
      },3000)   //延时可自行调整,尽量不要太小,因为教务系统卡
 setTimeout(()=>{
   document.querySelector('a[target="elect_page"]').click();
      },6000)   //延时可自行调整,尽量不要太小,因为教务系统卡
// 选修课程列表
var courseList = [ "空气净化与调节", "高分子材料的环境影响与循环利用", /* 添加更多课程 */];
// 查找包含选修课程的td标签
function findTdElementByText(text) {
    var tdElements = document.querySelectorAll('td');
    for (var i = 0; i < tdElements.length; i++) {
        if (tdElements[i].innerText.includes(text)) {
            return tdElements[i];
        }
    }
    return null;
}

// 查找包含“选课”文本的链接
function findSelectCourseLink() {
    var targetText = "选课";
    var tdElement = findTdElementByText(targetText);
    if (tdElement) {
        return tdElement.querySelector('a[operator="ELECTION"]');
    }
    return null;
}

// 点击选课链接
function clickSelectCourse() {
    var selectCourseLink = findSelectCourseLink();
    if (selectCourseLink) {
        // 保存原始的 window.confirm 方法
        var originalConfirm = window.confirm;

        // 重写 window.confirm 方法,始终返回 true(模拟用户点击了确定按钮)
        window.confirm = function () {
            return true;
        };

        // 循环点击每门课程的选课链接
        courseList.forEach(function (course) {
            // 模拟点击选课链接
            selectCourseLink.click();
            console.log("选择课程:" + course);

            // 刷新页面,准备选择下一门课程
            location.reload();
        });

        // 恢复原始的 window.confirm 方法
        window.confirm = originalConfirm;
    } else {
        console.error("未找到包含指定文字和选课文本的链接");
    }
}

// 调用点击选课函数
clickSelectCourse();
   })();

总结

本文记录了一下使用javascript实现教务系统自动点击选课的功能,如果要实现抢课的功能的话,那就需要配合selenium和python,下次有时间的话可能会做一个,不喜勿喷。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值