吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2392|回复: 10
收起左侧

[Python 原创] 新版超星图书馆座位预约

[复制链接]
Schwarz 发表于 2023-4-30 17:27
本帖最后由 Schwarz 于 2023-10-20 00:12 编辑

新代码已更新在新帖子,【js逆向】某习通座位预约加密分析(新手向)

https://www.52pojie.cn/thread-1793208-1-1.html
(出处: 吾爱破解论坛)


自己写的,比较懒,代码比较粗糙,见谅

流程大概是:

  1. 加密data
  2. 登录获取cookies
  3. 获取必要的token
  4. 定时
  5. 抢座

写完后才看到有人以前写过,但是貌似流程中的url结构与我的有点不同,只能保证我自己能直接使用,其他人仅做参考。

以下代码需要自己抓包改所有url中的seatId,有了seatId就可以直接在web端登录访问https://office.chaoxing.com/data/apps/seatengine/reservelist?cpage=1&pageSize=10&type=2&seatId=xxx
这样就可以获取到以前预约过的roomid和座位号seatNum,当然,懒得抓包可以直接遍历一波seatId

总结就是需要自己找到需要的seatid、roomid、seatNum,定时抢可以自己改时间

抢多个人的可以用aiohttp修改,放到服务器上定时运行更舒服



[Python] 纯文本查看 复制代码
```python
import requests
import requests.utils
from lxml import etree
import re
from Crypto.Cipher import AES
import base64
from datetime import datetime
import time


def encrpytByAES(message, key):
    key = "u2oh6Vu^HWe4_AES"
    iv = key.encode("utf-8")
    message = message.encode("utf-8")

    # 使用PKCS7Padding填充
    BS = AES.block_size
    padding = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS).encode()
    cipher = AES.new(iv, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(padding(message))
    return base64.b64encode(ciphertext).decode('utf-8')


def getCookies(data, headers):
    url = "https://passport2.chaoxing.com/fanyalogin"
    # proxy = {"http": "http://127.0.0.1:8080"}
    resp = requests.session()
    resp.headers = headers
    resp.post(url, data=data)
    url1 = "https://office.chaoxing.com/front/apps/seatengine/index?seatId=796"
    resp.get(url=url1)
    cookies = dict(resp.cookies.items())
    name = requests.utils.unquote(cookies['oa_name'])
    print(name)
    return resp


def getToken(session, today):
    # proxy = {"http": "http://127.0.0.1:8080"}
    url = f"http://office.chaoxing.com/front/third/apps/seatengine/select?id=1901&day={today}&backLevel=2&seatId=796"
    resp = session.get(url)
    res = etree.HTML(resp.text)
    script = res.xpath('/html/body/script[3]/text()')[0]
    pattern = re.compile("token = '(?P<token>.*?)'")
    token = pattern.search(script)
    if token:
        token = token.group('token')
        return token
    else:
        return None


def getSeat(session, roomId, startTime, endTime, day, seatNum, token):
    # proxy = "http://127.0.0.1:8080"
    seatNum = str(seatNum).rjust(3, '0')
    url = f'http://office.chaoxing.com/data/apps/seatengine/submit?roomId={roomId}&startTime={startTime}&endTime={endTime}&day={day}&captcha=&seatNum={seatNum}&token={token}'
    # resp = requests.get(url, cookies=cookies, headers=headers, proxies=proxy)
    # print(resp.text)
    resp = session.get(url)
    print(resp.text)
    # print(cookies)


def getData(info):
    data = {'fid': '-1', 'uname': encrpytByAES(info[0], 0), 'password': encrpytByAES(info[1], 0),
            'refer': 'https://office.chaoxing.com/front/apps/seatengine/index?seatId=796', 't': 'true',
            'forbidotherlogin': '0', 'validate': '', 'doubleFactorLogin': '0', 'independentId': '0'}
    return data


def main():
    headers = {
        'user-agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
    }

    info = [['手机号', '密码']] # 填写信息

    # 获取data
    wdata = getData(info[0])

    # 获取cookie
    wsession = getCookies(wdata, headers)

    today = datetime.now().strftime('%Y-%m-%d')
    # 获取必要的token
    wtoken = getToken(wsession, today)

    while True:
        t = datetime.now().strftime("%H:%M:%S")
        if t == "07:45:01": # 指定时间抢
            print(datetime.now())
            getSeat(wsession, 1888, "08:00", "21:30", today, 14, wtoken) # 需要修改信息
            print(datetime.now())
            break
        else:
            time.sleep(0.2)


if __name__ == '__main__':
    main()
# 10 15 * * * /home/ubuntu/chaoxing.py >> /home/ubuntu/script.log # 在服务器上定时任务更加舒服

```

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

orb001 发表于 2023-4-30 20:37
谢谢分享好软件
wangguang 发表于 2023-4-30 22:19
可惜现在不是要定位吗,就是要定位到附近位置才能预约呀
 楼主| Schwarz 发表于 2023-4-30 22:53
wangguang 发表于 2023-4-30 22:19
可惜现在不是要定位吗,就是要定位到附近位置才能预约呀

这样的我没见过,我们学校的直接就是预约
thomasyang2005 发表于 2023-5-3 13:20
谢谢分享,已收藏。
canxued 发表于 2023-5-8 01:35
这个不错喔,拿来可以二次修改一下,特别的好用
jiayou1 发表于 2023-7-3 17:20
你好,想请教一下要使用这个代码怎么修改
 楼主| Schwarz 发表于 2023-7-3 18:01
jiayou1 发表于 2023-7-3 17:20
你好,想请教一下要使用这个代码怎么修改

第77行,填入手机号和密码
第93行,函数定义在第54行,参数名字和前言说的对应,没讲到的看参数名也能看出来
第91行,是指定抢的时间,根据需要来修改
学习通加了加密校验,我新发的加密分析里面新加了解密函数,需要加进去
jiayou1 发表于 2023-7-3 18:35
Schwarz 发表于 2023-7-3 18:01
第77行,填入手机号和密码
第93行,函数定义在第54行,参数名字和前言说的对应,没讲到的看参数名也能看 ...

roomid seatnum都得到了,就是获取不了seatid可以求教吗?在stream寻不到
 楼主| Schwarz 发表于 2023-7-3 21:07
jiayou1 发表于 2023-7-3 18:35
roomid seatnum都得到了,就是获取不了seatid可以求教吗?在stream寻不到

一般来说进入预约主界面的请求url就带有这个参数,或者其他扫码,选座都有,可以抓包
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表