杭电选课脚本(一)登录选课系统

又到了学期末,选课的时间到了,中国的大学系统你懂得,卡,每次到了抢课时间,总是又卡又慢,半天刷不出来一个网站,如何写一个脚本,到了抢课时间运行一下,可以省时省力。这一篇只是伪登陆,后续的选课不知道能不能分析出来

步骤

  • 伪登陆数字杭电
  • 登陆选课系统
  • 获取sessionId

详细

如果懒的看一步步的话,可以直接拉到底看代码

  • 第一步伪登陆数字杭电

这里写图片描述
打开chrome检查窗口,捕捉登陆
在from data中有以下几个请求参数
encodedService’: ‘http://i.hdu.edu.cn/dcp/index.jsp‘,
‘service’: ‘http://jxgl.hdu.edu.cn/default.aspx‘,
‘serviceName’: ”,
‘loginErrCnt’: ‘0’,
‘username’: ”,
‘password’: ”,
‘lt’: ”

  其中username就是学号,password是加密后的密码,lt是实时刷新,目的是要你首先必须用网页登陆,然而可以先获取登陆页面抓取lt值,service就是我们要登陆进去的选课页面

 这里面主要就是要看看password是如何加密的,在检查台会上会发现login网络请求是由login.js脚本发起,那么接下来就看看这个脚本内容:

其中找到这样一个函数:
    function submitInfo() {
        //瀵瑰瘑鐮佽繘琛宮d5鍔犲瘑
        SetUserNameCookies();
        if(document.getElementById("password").value.length!=32&&document.getElementById("password").value!="") {
            document.getElementById("password").value=hex_md5(document.getElementById("password").value);
        }
        document.forms["login_form"].submit();
    }

document.getElementById(“password”).value=hex_md5(document.getElementById(“password”).value);

看上去好像是md5加密,于是我用的账号密码md5加密了一下,发现和检查台上密码的加密后字符串一致,所以是md5无疑。

那么参数已经完成了,请求后返回的text如下:

<!--%@ page isELIgnored ="false" %-->



<html>
<head>
<title>CAS认证转向</title>
<script>
 var cookie = document.cookie;
 if(cookie.indexOf("dcp_cas_hash") != -1){
     cookie = cookie.substring(cookie.indexOf("dcp_cas_hash")+13);
     if(cookie.indexOf(";")!=-1){
         cookie = cookie.substring(0,cookie.indexOf(";")); 
     }
 }else{
     cookie = '' ;
 }
  window.location.href="http://jxgl.hdu.edu.cn/default.aspx?ticket=ST-6851071-Kz4bvVrhqKPfh6pFivDs"+cookie;
 </script>
</head>

<body bgcolor="#0044AA">
 <noscript>
  <p>
   请点击<a href="http://jxgl.hdu.edu.cn/default.aspx?ticket=ST-6851071-Kz4bvVrhqKPfh6pFivDs">这里</a>访问您的应用程序。
  </p>
 </noscript>
</body>

</html>

如果实在浏览器上登录,那么返回的这个页面会自动跳转到http://jxgl.hdu.edu.cn/default.aspx?ticket=ST-6851071-Kz4bvVrhqKPfh6pFivDs

但是我们是伪登陆,那继续去访问这个页面,通过request发起get请求,发现我们已经到了数字杭电页面,那么第一步就已经完成。

  • 登录选课系统

登录上数字杭电然后点击选课系统,发现就是一个固定的URL ,并没有什么参数,如果没有登录数字杭电去直接访问选课系统就会又调到登录页面,那么我们刚刚第一步在登陆上数字杭电的同时,肯定设置了什么token,cookie什么的,在检查台仔细查看登录选课系统的请求header中发现了一个cookie,而这个cookie就是我们登录数字杭电成功后设置的,那么我们可以在上面登录玩数字杭电获取cookie值,然后再登录选课系统

cookie值的格式如下:ASP.NET_SessionId=1rxqzzyizfp02d45us3pbjb3; path=/; HttpOnly, route=acc407ccf2cd41551684a22ae27321f5;Path=/

获取cookie,再在请求选课的URL中设置cookie,就可以跳转到选课页面

  • 获取sessionId
    在上一步就获取到了cookie值,里面就有了sessionId等信息,这些信息在后续的查看课程,选择课程都需要加在header中。

程序源代码(python3.5,macOs10.12)

import requests
import hashlib
from lxml import etree


def md5(str):
    m = hashlib.md5(str.encode("utf-8"))
    return m.hexdigest()


# 获取请求参数中的lt
def getLT():
    lt_url = 'http://cas.hdu.edu.cn/cas/login?service=http%3A%2F%2Fi.hdu.edu.cn%2Fdcp%2Findex.jsp'
    r = requests.get(lt_url)
    html_text = r.text
    html_tree = etree.HTML(html_text)
    return html_tree.xpath('//*[@id="login_form"]/div/div[1]/input[2]')[0].get('value')


def getTicket(html_text):
    html_tree = etree.HTML(html_text)
    return html_tree.xpath('/html/body/noscript/p/a')[0].get('href')


url = 'http://cas.hdu.edu.cn/cas/login'
payload = {'encodedService': 'http://i.hdu.edu.cn/dcp/index.jsp',
           'service': 'http://jxgl.hdu.edu.cn/default.aspx',
           'serviceName': '',
           'loginErrCnt': '0',
           'username': '',
           'password': '',
           'lt': ''}

username = '15031243'
password = ''

payload['username'] = username
payload['password'] = md5(password)
# 在登陆首页抓取lt
payload['lt'] = getLT()

# 获取登陆ticket
r = requests.post(url, data=payload)
url_ticket = getTicket(r.text)

# 获取选课页面的cookie,后面的选课请求都会在header中设置cookie,没有cookie将无法登陆选课页面和选课操作
next = requests.get(url_ticket)
cookie = str(next.headers.get('Set-Cookie'))
print(cookie)
cas_select_class_url = 'http://jxgl.hdu.edu.cn/xs_main.aspx?xh=' + username
headers = {'Cookie': cookie}
select_html = requests.get(cas_select_class_url, headers=headers)

select = 'http://jxgl.hdu.edu.cn/zylb.aspx?xh=15031243&nj=2015'
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值