教务系统快速抢课

你,还在为抢不到课而烦恼吗?每当抢课时,服务器崩溃了,你也崩溃了,最后要么抢不到,要么选到的是别人挑剩下的,此时的你非常渴望,渴望抢课时总是能快人一步,看到这里,恭喜你,来对地方了。

废话少说,上链接。

(23条消息) ZUCC 正方教务系统 抢课脚本 抢课流程实现_教务系统抢课脚本_小y丶我又可以了的博客-CSDN博客

【手把手带你写抢课脚本】③完整代码展示_哔哩哔哩_bilibili

利用爬虫的相关知识,直接绕开登录界面和选课界面,对选课按钮进行request请求,理论上,抢课只需3秒,你能打败99.99%的人。

一、基于爬虫的抢课代码

基于爬虫的抢课代码不便展示,https://pan.baidu.com/s/1iG5phlayXKN1bwSkPY-nhg?pwd=ek4f

python基础爬虫+数据解析
建议爬取课程id和教学班id

不同学校使用的抢课系统不一样,代码不能直接使用,需要懂爬虫技术的人修改代码

参考下面链接的代码

python抢课_python实现强智科技教务系统抢课(两种方法)_weixin_39522486的博客-CSDN博客

二、基于selenium自动捡漏的抢课代码

此代码只适合人少的时候捡漏,用于二次抢课,比手抢快一些

from time import sleep
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge
import datetime
from selenium.webdriver.common.action_chains import ActionChains

#-------------*-*-*-*-抢课时间-*-*-*-*-------------
pre_time="2023-05-03 12:29:59.888888"
#-------------*-*-*-*-你的账号-*-*-*-*-------------
user="*********"
#-------------*-*-*-*-你的密码-*-*-*-*-------------
pass_word="***********"
#-------------*-*-*-*-抢课顺序-*-*-*-*-------------
book=["防控计算机病毒","计算机系统故障诊断"]

edge_options = EdgeOptions()
edge_options.use_chromium = True
edge_options.add_argument('--disable-blink-features=AutomationControlled')
bro = Edge(executable_path='msedgedriver.exe',options=edge_options)
bro.maximize_window()#最大化浏览器
bro.get('http://10.3.132.10/jwglxt/xtgl/login_slogin.html')  #网站页面
bro.implicitly_wait(3)#隐式等待1秒
sleep(1)

#登录
bro.find_element_by_id('yhm').send_keys(user)
sleep(1.5)
bro.find_element_by_id('mm').send_keys(pass_word)
sleep(1.5)
bro.find_element_by_id('dl').click()
sleep(3)

#进入等待界面
el=bro.find_element_by_xpath('//*[@id="cdNav"]/ul/li[3]')  #选课
ActionChains(bro).move_to_element(el).click().perform()
sleep(1)
ell=bro.find_element_by_xpath('//*[@id="cdNav"]/ul/li[3]/ul/li[3]/a')  #自主选课
ActionChains(bro).move_to_element(ell).click().perform()
bro.switch_to.window(bro.window_handles[-1])

while True:
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
    # 时间到的话就刷新
    if now >= pre_time:
        bro.refresh() #刷新
        bro.switch_to.window(bro.window_handles[-1])
        bro.implicitly_wait(15)

        #-------是否手动重新登录-------

        for lessen in book:
            while True:
                try:
                    #输入课程
                    bro.find_element_by_xpath('//*[@class="input-group"]/input').click()
                    bro.find_element_by_xpath('//*[@class="input-group"]/input').clear()
                    bro.find_element_by_xpath('//*[@class="input-group"]/input').send_keys(lessen)
                    sleep(1.5)
                    #搜索课程
                    #bro.find_element_by_xpath('//*[@id="searchBox"]/div/div[1]/div/div/div/div/span/button[1]').click()
                    bro.find_element_by_name('query').click()
                    break
                except:
                    print("找不到搜索按钮,请等一等")
                    bro.implicitly_wait(2)

            #-------------选课----------
            while True:
                try:
                    bro.find_element_by_xpath('//*[@class="an"]/button').click()  #
                    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
                    print(f"已经选了 :{lessen}")
                    break
                except:
                    print("选课按钮发生错误")
                    #查看是否满了
                    if(bro.find_element_by_class_name('jxbrl').text==bro.find_element_by_class_name('jxbrs').text):
                        break


            bro.implicitly_wait(3)
            sleep(5)
            
            #输入名称
            bro.find_element_by_xpath('//*[@id="searchBox"]/div/div[1]/div/div/div/div/input').send_keys()
            #有余量
            bro.find_element_by_xpath('//*[@id="searchBox"]/div/div[3]/div[13]/div/div/ul/li[1]')
            #查询
            bro.find_element_by_xpath('//*[@id="searchBox"]/div/div[1]/div/div/div/div/span/button[1]')
            #选课
            bro.find_element_by_xpath('//*[@class="an"]/button')
            
        # bro.execute_script('window.scrollBy(0,250)')  # 滚动
        print("已经抢完啦,抢到的时间:" + now)
        print("恭喜你!")
        break
    print('时间未到:'+now)

使用此代码需要学习selenium自动化 的使用:Python + Selenium Web自动化 2022更新版教程 自动化测试 软件测试 爬虫_哔哩哔哩_bilibili

包括在python中配置selenium的浏览器环境

你可能感兴趣的:(python,爬虫,selenium)