python实现一键体育馆场地、羽毛球场预定功能及其web服务部署(以武汉大学为例)


前言

现在手动抢球场真的很难,是时候解放双手了.
Talk is cheap, show me the code.
不想看code也不要紧,直接上我已经做好的服务亦可一键预定https://bookgym.wofost.com/


需要的库:conda 自带库,execjs, xmls

一、实现步骤

这里给大家贴一个前辈的探索,https://blog.csdn.net/baiguikai/article/details/101036360,这边前辈的方案已经过时了,导致无法登陆问题。
新思路:
1、登陆(跳转信息门户; 使用pyexecjs加密密码;获取token;返回登陆运动场预约系统;获取用户ID【不是学号!】)
2、查询空闲场地
3、提交

二、实现方案

1.引入库

代码如下(以武大运动场预约系统为例):

安装package
pip install pyexecjs
pip install lxml
import requests
from lxml import etree
import execjs
import datetime
import json
import time
import numpy as np

2.登陆模块

代码如下(示例):

 def login(self):
        # 参数
    
        headers = {
   
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
        }
        login = 'https://cas.whu.edu.cn/authserver/login?service=http://gym.whu.edu.cn:80/wechat/autoLoginConnector.jsp'
        
        
        # 使用会话保持 cookie
        s = requests.Session()
        
        # 首次请求,获取隐藏参数
        start_response = s.get(login)
        start_html = etree.HTML(start_response.text, parser=etree.HTMLParser())
        lt = start_html.xpath('//*[@id="casLoginForm"]/input[1]/@value')[0]
        dllt = start_html.xpath('//*[@id="casLoginForm"]/input[2]/@value')[0]
        execution = start_html.xpath('//*[@id="casLoginForm"]/input[3]/@value')[0]
        _eventId = start_html.xpath('//*[@id="casLoginForm"]/input[4]/@value')[0]
        rmShown = start_html.xpath('//*[@id="casLoginForm"]/input[5]/@value')[0]
        pwdDefaultEncryptSalt = start_html.xpath('//*[@id="casLoginForm"]/input[6]/@value')[0]
        
        # 调用 JavaScript 对密码加密
        with open('encrypt.js', 'r',encoding='utf-8') as f:
            js = f.read()
        ctx = execjs.compile(js)
        password = ctx.call('encryptAES', self.password, pwdDefaultEncryptSalt)
        
        
        # 登录
        data = {
   
            'username': self.username,
            'password': password,
            'lt': lt,
            'dllt': dllt,
            'execution': execution,
            '_eventId': _eventId,
            'rmShown'
  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
【资源说明】 基于python实现的智慧场馆自动预约系统源码+部署操作说明.zip 安装与需求 # Python 3 本项目需要 Python 3,可以从[Python 官网](https://www.python.org/)下载安装 # Packages selenium 采用如下命令安装 `selenium`,支持 2.48.0 及以上版本: ```python pip3 install selenium==2.48.0 ``` numpy Pillow opencv 基本用法 1. 将 `config.sample.ini` 文件重命名为 `config0.ini` ,如果需要多个账号预约,或者需要时间上的“与”关系,请设置多个.ini文件(最多为两位数), 请不要新建文件,不然自己搞定编码问题 2. 用文本编辑器(建议代码编辑器)打开 `config0.ini` 文件 3. 配置 `[login]` 、`[type]` 、`[time]`、`[wechat_notice]` 这几个 Section 下的变量,在 `config0.ini.sample` 文件内有详细注释 定时运行 # Windows 本项目中的 `autoRun.bat` 文件可提供在静默免打扰情况下运行程序的选择,配合 Windows 任务计划管理可实现定期自动填报,具体请参考[Win10下定时启动程序或脚本](https://blog.csdn.net/xielifu/article/details/81016220) # mac OS 进入项目根目录,以命令 `./macAutoRun.sh` 执行 `macAutoRun.sh` 脚本即可,可设定或取消定时运行 # Linux 使用 `crontab` 设置 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
实现一键绘画功能,可以使用Python中的Pillow库和Tkinter库。Pillow库是一个Python图像处理库,可以用于打开、操作和保存多种图像文件格式。Tkinter库是Python的标准GUI库,可以用于创建图形用户界面(GUI)应用程序。 以下是一个简单的Python程序,用于实现一键绘画功能: ```python from tkinter import * from PIL import Image, ImageDraw # 初始化画布 def init_canvas(): global canvas, draw canvas.delete("all") draw = ImageDraw.Draw(image) canvas.pack(expand=YES, fill=BOTH) canvas.bind("<B1-Motion>", paint) # 绘制画笔 def paint(event): global last_x, last_y x, y = event.x, event.y canvas.create_line((last_x, last_y, x, y), width=5) draw.line((last_x, last_y, x, y), fill='black', width=5) last_x, last_y = x, y # 保存绘画结果 def save_image(): filename = filedialog.asksaveasfilename(defaultextension=".jpg") if filename: image.save(filename) # 创建主窗口 root = Tk() root.title("一键绘画") # 创建画布 canvas = Canvas(root, bg='white', width=500, height=500) image = Image.new("RGB", (500, 500), "white") draw = ImageDraw.Draw(image) canvas.pack(expand=YES, fill=BOTH) canvas.bind("<B1-Motion>", paint) # 创建按钮 init_button = Button(root, text="初始化", command=init_canvas) init_button.pack(side=LEFT) save_button = Button(root, text="保存", command=save_image) save_button.pack(side=RIGHT) # 运行主循环 root.mainloop() ``` 这个程序创建了一个GUI窗口,其中包含一个画布和两个按钮。用户可以在画布上使用鼠标绘制画笔,点击初始化按钮可以清空画布,点击保存按钮可以将绘制结果保存为图片文件。 你可以将这个程序保存为一个 Python 脚本文件,然后在命令行中运行它即可。如果你想将这个程序部署到 Web 上,可以使用 Flask 或 Django 等 Web 框架来实现
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值