某理工大学研究生抢课脚本

要说这个抢课脚本,我们就得先说一下平时是怎么选课的。

先登录选课系统,然后点击选课。由于当前不再选课时间内,无法直观地看到选课过程。

那么我们就换一个例子说明,就拿我们用的很多的百度搜索来说。

当我们点击了一下“百度一下”究竟发生了什么?

假设我们输入 "python"

点击“百度一下”

浏览器将我们要查询的数据发送到百度服务器上对应的接口

服务器把数据返回给浏览器,浏览器再把数据展示出来

选课亦是如此,我们在浏览器中将我们想要选的课程点击好,然后浏览器帮我们把数据发送到学校的服务器上,在服务器上执行选课命令,最后服务器返回给我们选课成功或者不成功的数据,浏览器把这个数据展示给我们看。

解释到这里,事情就比较清楚了,浏览器就相当于一个中间人。

我跟浏览器说“我要选英语课”,浏览器就跑到服务器那跟服务器说"222***要选英语课",服务器就告诉浏览器:“选课成功或者选课失败”,最后浏览器就告诉我们选课是否成功。

那么我们是否可以跳过浏览器,直接跟服务器进行通信呢?答案是可以的。

这个服务器有很多的门,每个门又有不同的密码,我们都过这些们进行我们想要进行的操作或者得到我们想要的数据。

我们第一步就需要知道服务器的门在哪?需要什么要的密码?这里的门就是“服务器的服务接口”,密码就是需要传送的“数据”。

我们可以打开浏览器,登入研究生管理系统,由于选课的时间已过,我们拿查询已选课程作为例子。

按F12打开开发者控制台

选择网络,找到方法是POST的一条记录。

看这个请求的标头url(http://grdms.bit.edu.cn/yjs/dwr/call/plaincall/YyPyXkRemoteController.stdSelectedCourseResult.dwr)stdSelectedCourseResult,可以看到是学生已选课程结果。这个Url就是我们所谓的门。那么我们想要的密码呢。

我们再看这个请求的正文。

我们先来看响应正文,

这是我们的所选课程结果。

接下来看请求正文,

%E7%AC%AC%E4%BA%8C%E5%AD%A6%E6%9C%9F:第二学期

好了,门和密码我们都知道了,接下来就需要大声喊出芝麻开门了。

coding:utf-8

importrequests

importtimeurl='http://grdms.bit.edu.cn/yjs/dwr/call/plaincall/YyPyXkRemoteController.stdSelectedCourseResult.dwr'header={'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)'}

cookie={"Cookie":'JSESSIONID=yjs1app1~1EA8E1EF6A745A8F7588BF4BB368E079; SECURITY_AUTHENTICATION_COOKIE=2474352360e8f3fecbde6d19657e64ebe8fb15ac51091222770f80be52083eb2670da5c035c4534e; SECURE_AUTH_ROOT_COOKIE=2474352360e8f3fecbde6d19657e64ebe8fb15ac51091222770f80be52083eb2670da5c035c4534e'}

httpSessionId="yjs1app1~1EA8E1EF6A745A8F7588BF4BB368E079"

scriptSessionId="5A2C5A0CB9E88FADA297F6973312770A254"

student_id="string:[此处填学号]"

params={'callCount':'1',

'page':'/yjs/yanyuan/py/pyjxjh.do?method=stdCourseList',

'httpSessionId':httpSessionId,

'scriptSessionId':scriptSessionId,

'c0-scriptName':'YyPyXkRemoteController',

'c0-methodName':'stdSelectedCourseResult',

'c0-id':'0',

'c0-param0':"string:2017",

'c0-param1':'string:%E7%AC%AC%E4%BA%8C%E5%AD%A6%E6%9C%9F',

'batchId':'0'}

r=requests.post(url,data=params,headers=header,cookies=cookie)

s=r.text

prints

这里httpSessionId,scriptSessionId,cookie,

需要填写自己的值,直接F12,从控制台复制过来即可。

运行结果:

#coding:utf-8importrequestsimporttimeurl='http://grdms.bit.edu.cn/yjs/dwr/call/plaincall/YYPYCommonDWRController.pyJxjhSelectCourse.dwr'

header={'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)'}

cookie={"Cookie":'JSESSIONID=yjs1app1~1EA8E1EF6A745A8F7588BF4BB368E079; SECURITY_AUTHENTICATION_COOKIE=2474352360e8f3fecbde6d19657e64ebe8fb15ac51091222770f80be52083eb2670da5c035c4534e; SECURE_AUTH_ROOT_COOKIE=2474352360e8f3fecbde6d19657e64ebe8fb15ac51091222770f80be52083eb2670da5c035c4534e'}

httpSessionId="yjs1app1~1EA8E1EF6A745A8F7588BF4BB368E079"

scriptSessionId="5A2C5A0CB9E88FADA297F6973312770A254"

student_id="string:[你的学号]"

#矩阵分析2

data1={'callCount':'1',

'page':'/yjs/yanyuan/py/pyjxjh.do?method=stdSelectCourseEntry',

'httpSessionId':httpSessionId,

'scriptSessionId':scriptSessionId,

'c0-scriptName':'YYPYCommonDWRController',

'c0-methodName':'pyJxjhSelectCourse',

'c0-id':'0',

'c0-e1':student_id,

'c0-e2':'string:1',

'c0-e3':'string:YY000000000000000000000000485639',

'c0-e4':'string:YY000000000000000000000000485639',

'c0-e5':'string:%E7%A1%95%E5%A3%AB',

'c0-e6':'string:%E7%BB%9F%E6%8B%9B%E7%BB%9F%E5%88%86%E7%A0%94%E7%A9%B6%E7%94%9F',

'c0-e7':'string:2017',

'c0-e8':'string:',

'c0-e9':'string:',

'c0-param0':'Object_Object:',

'c0-e10':'string:YY000000000000000000000000485639',

'c0-e11':'string:2220170598',

'c0-e12':'string:1',

'c0-e13':'string:2017',

'c0-e14':'string:%E7%AC%AC%E4%BA%8C%E5%AD%A6%E6%9C%9F',

'c0-e15':'string:4028480060e8a6d0016103c238963d8c',

'c0-e16':'string:1700002',

'c0-e17':'string:%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90',

'c0-e18':'string:',

'c0-e19':'string:%E4%B8%93%E4%B8%9A%E5%BF%85%E4%BF%AE%E8%AF%BE',

'c0-e20':'string:%E4%B8%93%E4%B8%9A%E5%BF%85%E4%BF%AE%E8%AF%BE',

'c0-e21':'string:32',

'c0-e22':'string:2',

'c0-e23':'string:',

'c0-param1':'Object_Object:',

'batchId':'6'}

#矩阵分析3 魏丰

data2={'callCount':'1',

'page':'/yjs/yanyuan/py/pyjxjh.do?method=stdSelectCourseEntry',

'httpSessionId':httpSessionId,

'scriptSessionId':scriptSessionId,

'c0-scriptName':'YYPYCommonDWRController',

'c0-methodName':'pyJxjhSelectCourse',

'c0-id':'0',

'c0-e1':student_id,

'c0-e2':'string:1',

'c0-e3':'string:YY000000000000000000000000485639',

'c0-e4':'string:YY000000000000000000000000485639',

'c0-e5':'string:%E7%A1%95%E5%A3%AB',

'c0-e6':'string:%E7%BB%9F%E6%8B%9B%E7%BB%9F%E5%88%86%E7%A0%94%E7%A9%B6%E7%94%9F',

'c0-e7':'string:2017',

'c0-e8':'string:',

'c0-e9':'string:',

'c0-param0':'Object_Object:',

'c0-e10':'string:YY000000000000000000000000485639',

'c0-e11':student_id,

'c0-e12':'string:1',

'c0-e13':'string:2017',

'c0-e14':'string:%E7%AC%AC%E4%BA%8C%E5%AD%A6%E6%9C%9F',

'c0-e15':'string:402848c060e89db901610873a5dc4fb8',

'c0-e16':'string:1700002',

'c0-e17':'string:%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90',

'c0-e18':'string:',

'c0-e19':'string:%E4%B8%93%E4%B8%9A%E5%BF%85%E4%BF%AE%E8%AF%BE',

'c0-e20':'string:%E4%B8%93%E4%B8%9A%E5%BF%85%E4%BF%AE%E8%AF%BE',

'c0-e21':'string:32',

'c0-e22':'string:2',

'c0-e23':'string:',

'c0-param1':'Object_Object:',

'batchId':'6'}

i=

whileTrue:data1['batchId']=i r=requests.post(url,data=data1,headers=header,cookies=cookie)s=r.text

prints

if'success'ins:breaktime.sleep(1)i=i+1data2['batchId']=i r=requests.post(url,data=data2,headers=header,cookies=cookie)s=r.text

prints

if'success'ins:breaktime.sleep(1)i=i+1i=i%100

其中:

'c0-e16':'string:1700002',

这两个参数一个为:teachclassID,另一个为课程代码,我们需要知道这两个值。在某理的选课系统中还是有方法可以提前知道这两个值的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121G0K96L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券