东南大学羽毛球场地预约脚本

import requests
from lxml import etree
import ddddocr
from bs4 import BeautifulSoup
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from requests import Session

session = requests.session()

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
                  'Safari/537.36'
}


# 登录
def login(username, password):
    login_url = "https://newids.seu.edu.cn/authserver/login?service=http%3A%2F%2Fyuyue.seu.edu.cn%2Feduplus%2Forder%2FinitOrderIndex.do%3FsclId%3D1%26t_s%3D1690185906518%26EMAP_LANG%3Dzh%26THEME%3Dindigo%26amp_sec_version_%3D1%26gid_%3DSHdzcW0yM1pVQXRuYUdGMEdGc1JMSTZVbm94MGJYcTN4SGM5dkRrajdOZUtZVmw3ODZuUTZkR1NEQThDcUhuVEdJTzdtUHZwS1FNdVNjcXlHSldFVlE9PQ"
    html = session.post(login_url, headers=headers).text
    soup = BeautifulSoup(html, 'lxml')
    lt = soup.find('input', {'name': 'lt'})['value']
    dllt = soup.find('input', {'name': 'dllt'})['value']
    execution = soup.find('input', {'name': 'execution'})['value']
    _eventId = soup.find('input', {'name': '_eventId'})['value']
    rmShown = soup.find('input', {'name': 'rmShown'})['value']
    login_data = {
        'username': username,
        'password': password,
        'btn': '',
        'lt': lt,
        'dllt': dllt,
        'execution': execution,
        '_eventId': _eventId,
        'rmShown': rmShown
    }

    res = session.post(url=login_url, headers=headers, data=login_data)
    # print(res.headers)
    # print(res.text)
    # print(res.status_code)
    if 'Set-Cookie' not in res.headers:
        print("登录失败,重新输入")
        return False
    print("登录成功")
    return True


# 获取验证码
def getValidateCode():
    url = f'http://yuyue.seu.edu.cn/eduplus/order/order/initEditOrder.do?sclId=1&dayInfo={order_date}&itemId=10&time={order_time}'
    res = session.get(url=url, headers=headers)
    res.encoding = 'utf-8'
    value = res.text
    # print(value)
    html = etree.HTML(value)
    img_url = html.xpath('//tr/td/img/@src')[0]
    # print(img_url)
    # 保存并识别验证码
    img = session.get(url=img_url, headers=headers).content

    ocr = ddddocr.DdddOcr()
    with open('1111.jpg', 'wb+') as f:
        f.write(img)
    with open('1111.jpg', 'rb') as f2:
        img_bytes = f2.read()
    code = ocr.classification(img_bytes)
    print('识别的验证码是:' + code)
    return code


# 订场
def order(order_date, order_time, code):
    url = "http://yuyue.seu.edu.cn/eduplus/order/order/order/judgeUseUser.do?sclId=1"
    # # url编码时间
    # url_time = parse.quote(time)
    data = {
        'useTime': f'{order_date} {order_time}',
        # 'useTime': f'2023-07-27 16:00-17:00',
        'itemId': 10,
        'allowHalf': 2,
        'validateCode': 'jMau4',
        'phone': 13888888888
    }
    data['validateCode'] = code
    try:
        res = session.post(url=url, data=data, headers=headers)
        if res.status_code == 200:
            # 处理获取到的数据
            value = res.text
            print(value)
            if (value.find("sucuss") >= 0):
                print('预约成功')
                return True
        else:
            print('获取数据失败,状态码:', res.status_code)
    except res.RequestException as e:
        print('获取数据出错:', e)
    return False


def runny(username, password):
    # 登录,获取cookie
    # print(username,password)
    if not login(username, password):
        print('Please dont hit me!')
        return
    cnt = 0
    while cnt < 90000:
        # 获取验证码
        code = getValidateCode()
        # 订场
        if order(order_date=order_date, order_time=order_time, code=code):
            break
        cnt += 1


if __name__ == "__main__":
    order_date = input("用场日期(2023-07-27)")
    order_time = input("用场时间(14:00-15:00)")
    username = input("一卡通号")
    password = input("密码")
    # 验证用户名密码是否正确,不正确则重新输入

    print("程序将于次日8时开始执行")
    # hour = input("程序执行时刻(小时)")
    # minute = input("程序执行时刻(分钟)")
    # print(f'程序将于{hour}:{minute}执行')
    sched = BlockingScheduler()
    # sched.add_job(func=runny, args=(username, password), trigger="cron", hour=hour, minute=minute)
    sched.add_job(func=runny, args=(username, password), trigger="cron", hour=7, minute=59, second=50)
    sched.start()

毕业了,做点好事。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值