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()
毕业了,做点好事。