python实现复旦大学选课系统自动抢课神器抢课软件Courcegoblin抢课软件ver 1.0

这篇具有很好参考价值的文章主要介绍了python实现复旦大学选课系统自动抢课神器抢课软件Courcegoblin抢课软件ver 1.0。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

朋友最近遇上选课困难,手速慢,总是抢不到心仪的课程,我目前正好找不到爬虫项目练手,于是写了个面向复旦选课系统的抢课小软件帮助朋友抢课

首先需要这些模块:

import requests
import re
import time
import schedule

第一步需要做的是通过身份认证并爬取csrf-token,在选课网站登陆后复制cookies到代码中,这是服务器识别你身份的方式,接着网站会通过生成csrf-token并将其包含在选课请求中来进一步保护信息安全;csrf-token这是网站的一道保护措施,网站根据你提交的cookie信息生成一段随机的csrf-token码,你需要将其爬取并应用到后续的请求中。

class csrfscrapy():
    def csrf_req(self):
        cookies = {
            '_WEU': '********',
            'route': '***********',
            'JSESSIONID': '***********',
            'XK_TOKEN': '****************',
        }#cookie需替换,根据自己登陆后找到的cookie进行替换

        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-GB;q=0.6',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Referer': 'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/*default/index.do',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46',
        }

        res = requests.get(
            'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkHome/gotoChooseCourse.do',
            cookies=cookies,
            headers=headers,
            verify=False,
        )
        return res

    def pares_csrf(self, res):
        csrf=re.findall('csrfToken\W+value=\W+([a-z0-9]+)\W', res.text)
        csrfstr=csrf[0]
        print(csrfstr)
        return csrfstr#从html中找到csrftoken

    def run(self):
        responce=self.csrf_req()
        csrfstr=str(self.pares_csrf(responce))
        return csrfstr

之后要解决的就是提交选课请求,注意在request.post中有个参数param(dict类型),这是时间13位时间戳,需要整合到url里一起提交;另外一个参数是data(dict类型),里面包含csrf-token和选课信息bjdm,lx,bqmc和身份认证csrfToken。其中bjdm是课程代码,lx是课程类型(数字,专业外语对应7,其他选修课10,公共选修课9),bqmc是课程所在的分类(如专业外语,其他选修课,公共选修课等),lx和bqmc钥匙可以通过自己要选的课程所在的门类进行填写,比如要选的xxx课程在公共选修课,那么'lx': '9', 'bqmc': '公共选修课’。bjdm钥匙需要在浏览器开发者模式中寻找对应的代码,后续详细说明。csrfToken钥匙则是上个部分爬取的结果。

class courceburglar():
    def __init__(self, csrf):
        self.csrf=csrf

    def get_millisecond():

        millis = int(round(time.time() * 1000))
        return millis

    def cource_req(self):
        cookies = {
            '_WEU': '********',
            'route': '***********',
            'JSESSIONID': '***********',
            'XK_TOKEN': '****************',
        }#cookie需替换,根据自己登陆后找到的cookie进行替换

        headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-GB;q=0.6',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Origin': 'http://yjsxk.fudan.sh.cn',
            'Referer': 'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkHome/gotoChooseCourse.do',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46',
            'X-Requested-With': 'XMLHttpRequest',
        }

        timestramp = courceburglar.get_millisecond()
        print(timestramp)
        params = {
            '_': timestramp,
        }

        data = {
            'bjdm': '************',
            'lx': '7',
            'bqmc': '专业外语',
            'csrfToken': self.csrf,
        }

        response = requests.post(
            'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkCourse/choiceCourse.do',
            params=params,
            cookies=cookies,
            headers=headers,
            data=data,
            verify=False,
        )
        print(response.status_code)

    def run(self):
        responce=self.cource_req()

如何寻找cookie:首先登陆自己选课账号,进入选课界面,f12打开开发者界面中的网络(或者network)选项卡,刷新你的浏览器,在你的开发者界面会有如下的状态,打开任意一个形如r'\w+do\?_=\d+'命名的文件的请求头(或者headers)选项卡,在request headers中包含了cookie信息,稍微加工改成dict类型,替换掉两部分代码中cookies部分.

python爬虫抢课,python,爬虫,csrf,网络安全,scrapy,Powered by 金山文档

如何寻找课程代码:清空你的开发者界面,将你的选课类别调整到你需要选的类型中,比如你要选公共选修课的课程,你将浏览器中的选项点击到公共选修课,与此同时,在开发者界面会出现响应的文件,打开形如'loadxxxxxcourceinfo.do?_=xxxxxx'文件,打开preview的选项卡,在众多检索出的课程中找到你要的课程的BJDM,并替换掉data参数里面的bjdm。

python爬虫抢课,python,爬虫,csrf,网络安全,scrapy,Powered by 金山文档

代码最后就是时间部分:通过schedule模块控制选课请求发送时间。选课系统一般是下午一点开放。

if __name__=='__main__':
    def job(cs):
        crsreq = courceburglar(cs)
        crsreq.run()
    csrf=csrfscrapy()
    csrftoken=csrf.run()
    #schedule.every(5).to(10).minutes.do(job, csrftoken) #5-10分钟随机做一次
    schedule.every().day.at("13:00").do(job, csrftoken)
    while True:
        schedule.run_pending()
        time.sleep(1)

具体参考这位大佬的内容:(10条消息) Python3学习(八):使用schedule模块定时执行任务_猪笨是念来过倒的博客-CSDN博客_schedule.run_pending()

整合起来全代码如下:

import requests
import re
import time
import schedule

class csrfscrapy():
    def csrf_req(self):
        cookies = {
            '_WEU': '********',
            'route': '***********',
            'JSESSIONID': '***********',
            'XK_TOKEN': '****************',
        }#cookie需替换,根据自己登陆后找到的cookie进行替换

        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-GB;q=0.6',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Referer': 'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/*default/index.do',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46',
        }

        res = requests.get(
            'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkHome/gotoChooseCourse.do',
            cookies=cookies,
            headers=headers,
            verify=False,
        )
        return res

    def pares_csrf(self, res):
        csrf=re.findall('csrfToken\W+value=\W+([a-z0-9]+)\W', res.text)
        csrfstr=csrf[0]
        print(csrfstr)
        return csrfstr#从html中找到csrftoken

    def run(self):
        responce=self.csrf_req()
        csrfstr=str(self.pares_csrf(responce))
        return csrfstr

class courceburglar():
    def __init__(self, csrf):
        self.csrf=csrf

    def get_millisecond():

        millis = int(round(time.time() * 1000))
        return millis

    def cource_req(self):
        cookies = {
            '_WEU': '********',
            'route': '***********',
            'JSESSIONID': '***********',
            'XK_TOKEN': '****************',
        }#cookie需替换,根据自己登陆后找到的cookie进行替换

        headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-GB;q=0.6',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Origin': 'http://yjsxk.fudan.sh.cn',
            'Referer': 'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkHome/gotoChooseCourse.do',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46',
            'X-Requested-With': 'XMLHttpRequest',
        }

        timestramp = courceburglar.get_millisecond()
        print(timestramp)
        params = {
            '_': timestramp,
        }

        data = {
            'bjdm': '************',
            'lx': '7',
            'bqmc': '专业外语',
            'csrfToken': self.csrf,
        }

        response = requests.post(
            'http://yjsxk.fudan.sh.cn/yjsxkapp/sys/xsxkappfudan/xsxkCourse/choiceCourse.do',
            params=params,
            cookies=cookies,
            headers=headers,
            data=data,
            verify=False,
        )
        print(response.status_code)

    def run(self):
        responce=self.cource_req()

if __name__=='__main__':
    def job(cs):
        crsreq = courceburglar(cs)
        crsreq.run()
    csrf=csrfscrapy()
    csrftoken=csrf.run()
    #schedule.every(5).to(10).minutes.do(job, csrftoken) #5-10分钟随机做一次
    schedule.every().day.at("13:00").do(job, csrftoken)
    while True:
        schedule.run_pending()
        time.sleep(1)

后续改进可以写一个可以自动生成需要的选课信息并将信息放进队列的模块,以及多线程同时发送选课请求的模块。文章来源地址https://www.toymoban.com/news/detail-689444.html

到了这里,关于python实现复旦大学选课系统自动抢课神器抢课软件Courcegoblin抢课软件ver 1.0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 体验文心一言AI大模型生成伊利诺伊大学香槟分校、复旦大学、上海交通大学、东南大学和加州伯克利大学简介

    UIUC(University of Illinois at Urbana-Champaign)是美国伊利诺伊大学香槟分校的简称。该学校成立于1868年,位于美国伊利诺伊州香槟市,是一所公立研究型大学。UIUC是美国著名的常春藤盟校之一,在多个学科领域享有声誉,包括工程、商科、建筑、心理学、法学、医学、农学等。

    2024年02月11日
    浏览(63)
  • 老杨说运维 | 历时180天,跟复旦大学共研的运维大模型终于来了!

    A1:AI大模型是“人工智能预训练大模型\\\"的简称, 它包含了\\\"预训练“和”大模型“两层含义,二者结合产生了一种新的人工智能模式即 模型在大规模数据集上完成了预训练后无需或仅需要少量数据的微调,就能直接支撑各类应用。 AI大模型具备通用、可规模化复制等诸多优

    2024年02月06日
    浏览(42)
  • 复旦-华盛顿大学EMBA 二十年20人丨徐欣:从外企转战民企的变身

    复旦大学-华盛顿大学EMBA20周年校友系列访谈。 2008年堪称转折之年,中国举行北京奥运会向全世界展示“和而不同”的理念,入世7年让中国在贸易、金融领域与全球市场紧密相连,一大批最优秀的中国民营企业也加速踏上全球化之路。 就在这一年,从微软起步一路“春风得

    2024年02月07日
    浏览(43)
  • 大学生选修选课系统|基于Springboot的大学生选修选课系统设计与实现(源码+数据库+文档)

    大学生选修选课系统目录 目录 基于Springboot的大学生选修选课系统设计与实现 一、前言 二、系统功能设计  三、系统实现  1、用户信息管理 2、 课程信息管理 3、排课信息管理 4、公告信息管理  四、数据库设计 1、实体ER图   五、核心代码   六、论文参考 七、最新计算机

    2024年03月11日
    浏览(78)
  • node.js+vue.js大学生在线选课系统的设计与实现93pul

    本次设计任务是要设计一个选课系统的设计与实现,通过这个系统能够满足用户对选课信息的需求。系统的主要功能包括:个人中心、学生管理、教师管理、选课信息管理等功能。 管理员可以根据系统给定的账号进行登录,登录后可以进入选课系统的设计与实现对所有模块进

    2024年02月06日
    浏览(63)
  • Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课

    学生选课管理系统是一个基于Python Django开发的教务管理系统,旨在提供方便快捷的选课服务和学籍管理功能。该系统分为教师端和学生端两个角色,为教师和学生提供了不同的功能和权限。 教师端功能: 教师可以登录系统后,进行课程管理、成绩录入和学生管理等操作。具

    2024年01月24日
    浏览(51)
  • C++实现---学生选课系统

    目录 一、项目要求 二、模块分析 分析: 设计思路 类实现:(也就是每一节车厢的模板) 1)基类(信息类) 2)课程类;(公有继承信息类) 3)学生类(公有继承信息类) 函数实现 1) void print();向屏幕输出课程信息 2)void get();指定课程的信息,用课程编号获取 3)

    2024年02月09日
    浏览(38)
  • 在线选课系统设计与实现

    目录 1 系统简介 2 系统相关技术    2.1J2EE平台的相关简介 2.2基于J2EE的Web应用开发技术 2.2.1数据库 2.2.2Servlet和JSP 2.2.3MVC和框架的应用 ​​​​​​​2.3J2EE应用服务器(Tomcat) ​​​​​​​2.4MyBatis相关概况 3 需求分析 ​​​​​​​3.1非功能需求分析 3.1.1系统的需求描述

    2024年02月03日
    浏览(82)
  • java实现管理学生选课系统

    项目简介 基于Java Swing+MySQL的学生选课管理系统,支持对课程的发布,查询,添加,删除操作,同时支持对学生及教师信息的管理。       2.项目采用技术 该项目主要使用Java Swing+SQLServer        3.功能需求分析 学生选课管理系统中要实现管理者对于学生和教师信息的管理以

    2024年02月07日
    浏览(45)
  • C语言学生选课系统实现

    学生选修课程系统设计 1、需求分析     系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。 2、总体设计    整

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包