Python+JavaScript 实现自动抢课

环境要求:Python 3 及 selenium 模块,chrome 及 chromedriver 驱动

首先,导入模块及 chromedrive。

from selenium import webdriver
import os
import time

chromedriver = "D:\path\to\chromedriver.exe"
os.environ['webdriver.chrome.driver'] = chromedriver
driver = webdriver.Chrome(chromedriver)

登陆 URP 系统,依次点击“选课管理”和“选课方案”,观察到选课页面为一单独的 frame ,其网址为 http://jwxt.bupt.edu.cn/xkAction.do?actionType=-1。故在登陆后,可直接打开选课界面,并进入校任选课页面。

driver.get('http://jwxt.bupt.edu.cn/')
str = input("Enter:")
driver.get('http://jwxt.bupt.edu.cn/xkAction.do?actionType=-1')
driver.find_element_by_xpath('/html/body/table[4]/tbody/tr/td/table/tbody/tr/td[11]/a').click() #校任选课

由于课表在一 frame 中,故切换至此 frame 。翻页即跳转,提交即点击事件,而选课即为勾选多选框,且多选框的值为对应课程号和课序号,故可用 JavaScript 脚本检测是否可以选课,并自动选课、提交。

var tars = new Array("3412113011_01","3412113011_02"); #课程号_课序号
var findit = false;
for (var ti = 0; ti < tars.length; ti++){
    input = document.getElementsByTagName("input");
    for (var i = 0; i < input.length; i++) {
        if (input[i].type == "checkbox") {
            if (input[i].value == tars[ti]){
                input[i].checked = true;
                findit = true
                }
            }
        }
    }
if (findit) {
    document.xkActionForm.submit();
}

最后,循环切换页面并执行脚本,直到选课成功,产生 alert。

while True:
    driver.execute_script(xkcommend) #刚刚提到的 JavaScript 脚本
    driver.execute_script("window.location.href='xkAction.do?actionType=3&pageNumber=2'") #page2
    driver.implicitly_wait(15)
    driver.execute_script(xkcommend)
    driver.execute_script("window.location.href='xkAction.do?actionType=3&pageNumber=3'")
    driver.implicitly_wait(15)
    driver.execute_script(xkcommend)
    driver.execute_script("window.location.href='xkAction.do?actionType=3&pageNumber=4'")
    driver.implicitly_wait(15)
    driver.execute_script(xkcommend)
    driver.execute_script("window.location.href='xkAction.do?actionType=3&pageNumber=1'")
    time.sleep(4)

发表评论