图书馆预约脚本编写流程(简单版)

整体思路

利用charles抓取预约请求,将请求数据复制到postman中进一步分析,利用python脚本模拟预约请求,最后用服务器定时运行脚本。

1 抓包

1.1 Charles的安装

1)下载Charles安装包。

下载地址https://www.charlesproxy.com/download/,根据系统选择对应的版本。

image-20240112200150653

2)安装Charles。

下载后双击安装包,如果显示

image-20240112203710757

说明以前安装过了。

下面是新安装的页面(安装过程基本上全部默认即可)。

image-20240112204743085

image-20240112204814465

image-20240112205001964

image-20240112205139418

image-20240112205208328

安装过程中进度条不动可能是权限不够的原因,过几秒后会弹出提示框,点击是。

image-20240112205342251

image-20240112205430872

安装成功。

1.2 Charles的基本使用

1)注册

charles可以免费试用30天。如试用期已到,可进行破解(仅用于学习,强烈建议支持正版)。

破解工具地址https://www.zzzmode.com/mytools/charles/。

输入注册名,点击生成

image-20240114202625809

弹出对应密钥

image-20240114202654296

复制密钥至剪切板。

打开Charles,点击help->register

image-20240114203100412

弹出注册框

image-20240114203204805

将注册名和密钥输入点击register即可。

2)配置抓包Https
1 安装证书

image-20240114203446955

image-20240114204423309

image-20240114204618883

image-20240114204648804

image-20240114204706078

2 配置443端口

image-20240114204907928

image-20240114205238041

配置完成

1.3 使用charles抓到预约对应包

以我们学校的预约程序为例

1)打开Charles软件,开启抓包

image-20240114205509538

2)打开预约程序,选择对应座位

image-20240114205800541

在预约前清理多余的包

image-20240114205851601

点击确认预约

image-20240115201503158

点击第一个包,可以看到抓到了预约的包。

image-20240115201607513

右键点击第一个包,选择复制请求。等会将请求放入postman中。

2 分析请求

2.1 Postman安装(非必要)

我们也可以直接在charles中进行分析,只是我习惯使用postman。

1)下载Postman安装包

下载地址https://www.postman.com/downloads/,下载对应系统的安装包。

image-20240115202941805

2)安装Postman

双击安装包。

image-20240115204649286

不登录直接使用页面如下

image-20240115204808933

2.2 将Charles的包导入Postman

image-20240115205114722

导入后先将请求保存

image-20240115205805473

2.3 Postman分析请求

编写代码时Params和Headers固定,这里不分析。

body数据分析

点击body。可以看到类型为text,而不是常用类型json

image-20240115211658181

两次请求数据

在1月5日请求1月6日8.00-21.00的304-64号座位

beginTime=1704499200&duration=46800&seats%5B0%5D=11439&is_recommend=1&api_time=1704435599&seatBookers%5B0%5D=

在12月29日请求12月30日18.00-19.00的304-66号座位

beginTime=1703930400&duration=3600&seats%5B0%5D=11441&is_recommend=1&api_time=1703852294&seatBookers%5B0%5D=304808
变量名(含义)类型
beginTime(开始时间)时间戳
duration(持续时间)int(秒)
seats%5B0%5D(座位编号11439 - 11375 = 64)int(id - title)
is_recommend(是否推荐)bool
api_time(请求时间/当前时间)时间戳
seatBookers(预约者编号)int

这里的是否推荐是通过之前预定的座位自动判断的,值可以随意。

3 编写代码

3.1 Pycharm安装(非必要)

当然我们也可以使用在线工具测试我们的代码是否可以成功运行,如菜鸟工具https://c.runoob.com/compile/9/

image-20240116212512608

1)下载安装包

下载地址https://www.jetbrains.com/pycharm/download/?section=windows

选择自己的系统,点击下载

image-20240116203519616

2)安装PyCharm

image-20240117194747225

C盘不够可以修改盘符。

image-20240117195040434

看情况勾选,一般都选就可以

image-20240117195145948

image-20240117195205203

3)注册

PyCharm可以免费试用30天。如试用期已到,可进行破解(仅用于学习,强烈建议支持正版)。

详细可查看此文章

3.2 根据分析,编写代码

整个代码构成

import requests
from datetime import datetime, timedelta

# 目标URL
url = ''

# 请求头
headers = {
    'Host': '',
    'accept': '',
    'api-token': '',
    'User-Agent': '',
    'content-type': '',
    'Origin': '',
    'Sec-Fetch-Site': '',
    'Sec-Fetch-Dest': '',
    'Referer': '',
    'Accept-Language': '',
    'Cookie': '',
    # 添加其他头信息...
}

# URL参数
params = {'LAB_JSON': ''}

# 要发送的数据
# 当前时间(固定)
api_time = datetime.now()

# 开始时间为两天后的8.00
day = 2
beginTime = (api_time + timedelta(days=day)).replace(hour=8, minute=0, second=0, microsecond=0)

# 持续时间秒
hours = 13
duration = 60 * 60 * hours

# 座位号(须填)
seats = 

# 预定者(用户)编号()
seatBookers = 

data = 'beginTime={}&duration={}&seats%5B0%5D={}&is_recommend=1&api_time={}&seatBookers%5B0%5D={}'.format(
    beginTime.timestamp(), duration, seats, api_time.timestamp(), seatBookers
)
# 发送POST请求
response = requests.post(url, params=params, headers=headers, data=data)

# 检查响应
if response.status_code == 200:
    print('请求成功!')
    print('响应内容:', response.text)
else:
    print(f'请求失败,状态码: {response.status_code}')
    print('错误内容:', response.text)
参数
目标URL

url = ‘’

image-20240116204655880

问号之前的地址

请求头

headers = {
‘Host’: ‘’,
‘accept’: ‘’,
‘api-token’: ‘’,
‘User-Agent’: ‘’,
‘content-type’: ‘’,
‘Origin’: ‘’,
‘Sec-Fetch-Site’: ‘’,
‘Sec-Fetch-Dest’: ‘’,
‘Referer’: ‘’,
‘Accept-Language’: ‘’,
‘Cookie’: ‘’,

#添加其他头信息…

}

image-20240116204839845

Headers中的所有信息(不用变)。

URL参数

params = {‘LAB_JSON’: ‘’}

image-20240116205149294

url中?后面的参数,或者点击params查看。

body中的数据(要改)

我们学校是当天21:00可以预约两天后的座位。时间段为8:00-21:00

当前时间(固定)

api_time = datetime.now()

开始时间

#这里设为两天后的8:00

day = 2
beginTime = (api_time + timedelta(days=day)).replace(hour=8, minute=0, second=0, microsecond=0)

持续时间秒

#13个小时

hours = 13
duration = 60 * 60 * hours

座位号

#不一定是显示的编号

seats =

image-20240116210001976

填请求中的值即可

预定者(用户)编号(固定)

seatBookers =

因为代码编写简单只能固定时间段固定一个座位,如果要改只能改请求参数。

4 定时运行

4.1 WindTerm的安装

1)下载WindTerm

下载地址https://github.com/kingToolbox/WindTerm/releases

image-20240123223432494

2) 安装WindTerm

直接压缩即可,可以创建快捷方式放桌面。

image-20240123224008299

4.2 WindTerm连接远程服务器

1) 创建会话。

打开windterm后,在会话栏右击。

image-20240123224603023

选择ssh,填入对应信息。

image-20240124221604374

4.3 服务器配置

1) 进入代码需要存放的地址
#创建代码存放文件夹
mkdir /opt/python_script
#进入文件夹
cd /opt/python_script/
2) 将代码上传服务器当前文件夹

可以使用shell软件或者别的传输软件

crontab -e
0 21 * * * /usr/bin/python3 /opt/python_script/zwu_lib.py
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XINQI_YI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值