【免费开源】我去图书馆公众号 明日预约自动抢座

🔊 【2024/12/26】最新公告

最近学校又重新启用预约系统了,但是我在测试时发现若使用该程序预约会触发:“临时限制预约用户(异常预约)”,导致使用该程序的帐号锁定预约功能两天,在锁定期内,只能次日7:45之后才能选座位,请自行斟酌后再决定你是否还继续使用该程序。
由于该预约脚本不再是我的刚需,我不再打算针对性地添加反制代码进行维护了❗❗❗,请各位遵守我去图书馆公众号规则,有序预约。
当然,如果有人在此基础上二开解决了这个问题,也欢迎到文中的两个repo提pr。

原本在考研期间为了简化作者每天预约座位的流程编写,看了网上不少类似的项目用起来都差点意思(我希望能在手机上完成所有操作),有的甚至还要收费,于是决定自己写一个。现在将其完善后免费开源到GITHUB上,欢迎大家参照本文内容自己部署,一起学习,如果该项目帮助到你,希望你能够为项目仓库点一个star⭐。

❗❗❗ 声明

 1.本人无意侵犯任何组织或个人的权益, 并非针对"我去图书馆"系统和其公司,仅作学习交流

 2.本项目完全免费,若在使用过程中发现程序中存在的任何问题,欢迎到仓库提issue或评论私信

 3.此项目遵循 MIT 开源许可证,您可以随意修改源代码、版权并自主选择是否闭源,但衷心建议不要二次修改此项目用来收费盈利,由此造成的后果由修改者个人自己承担

直达链接:

项目Gitee地址icon-default.png?t=O83Ahttps://gitee.com/suchongyuan/I_Goto_Library

项目GITHUB仓库地址icon-default.png?t=O83Ahttps://github.com/A164759920/I_Goto_Library?tab=readme-ov-file项目服务器参考接口文档icon-default.png?t=O83Ahttps://a164759920.github.io/I_Goto_Library/

Vue - 使用 腾讯云SCF部署Vue项目(支持GitHub Action)_腾讯云上上部署vue项目-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/SCY164759920/article/details/127996570?spm=1001.2014.3001.5501

 1.🔉 说明:

         1.1 功能:

实现 我去图书馆公众号定时自动预约 第二天指定座位的功能,并且提供简化操作的前端页面

  (从 2023 年 3 月维护至此仓库创建时,此项目已根据公众号更新的各种机制:websocket 排队/SERVERID 校验/防刷判定/版本号判定等更新了相对应的补丁, 所有功能目前均能正常使用)

🔨补丁日志: 补丁日志链接

        1.2 使用方法:

        step1: 抓包获取 Cookie

  在开启明日预约前的一小时内(保证Cookie有效),通过抓包软件(如 httpCanary)抓取 Cookie


        step2:设置 Cookie 

          1.通过仓库配套的前端页面设置(推荐)⭐⭐⭐

         2.手动调用后端接口设置

  参考接口文档中的 /lib/setCookie 接口


        (step3):获取可选场馆列表(首次使用时执行一次即可)【需要 Cookie 有效】

  操作后服务器会自动抓取你所在学校图书馆可供预约的所有场馆信息,并存入服务器中

         1.通过配套前端页面设置(推荐)⭐⭐⭐

         2.手动调用后端接口设置

参考接口文档中的 /lib/getLibList2接口


- (step4):选择场馆 + 设置座位号【需要 Cookie 有效】

  设置过一次后,服务器将记住你此时的选择,下次再进入页面时,若不换座位,则此步骤无需再执行

           1.通过配套前端页面设置(推荐)⭐⭐⭐:

    设置时输入座位上的座位编号,再点击 "修改座位" 即可,若选择场馆存在该座位号,则服务器将自动匹配座位的key并设置,节省大家手动匹配的繁琐过程

          2.手动调用后端接口设置

    参考接口文档中的/lib/changeSeat 接口

        1.3 运行时演示:

1.4 所用技术:

查看 GITHUB 上相关项目 ISSUE 区后发现,此类项目大多存在许多使用者部署项目困难的问题,因此本项目提供了多种部署方式,最终可实现在手机上完成所有操作,且编写了较为详细的部署步骤,希望能帮助到大家

        1.4.1 关于 Cookie

由于新版我去图书馆采用的 Cookie 有时限,仍需要借助 抓包工具 抓取 token,其余部分均已实现了自动化

⭐⭐⭐推荐手机端使用httpCanary,较为方便

        1.4.2 关于技术栈

        该项目基于 node.js + Vue2.js 并提供以下功能方便操作:

  • 自动生成的服务器接口文档
  • 配套前端页面(已适配手机/电脑),简化操作
  • docker-compose 一键 调试 + 部署
  • nginx 的 conf 文件配置示例

2.环境配置 🔨

  • node 建议 v14.0.0+ 及以上版本
  • NPM
  • 手机抓包工具(httpCanary等...)
  • docker(根据部署方法选装,可忽略)
  • docker-compose (根据部署方法选装,可忽略)

3 项目部署

已尽量提供了多种部署的方案,大家根据自己的需求选择即可

        3.1 node 服务器部署

        tips:会调试和部署node服务器的读者可自行操作

        ⭕ (该方式部署的 vue 为 dev 版)

API文档链接icon-default.png?t=O83Ahttps://a164759920.github.io/I_Goto_Library/

         3.1.1 手动部署                

          1.依赖安装
cd ./nodeServer
npm install
         2.启动服务器 (提供**三种**可选方式)
  • 直接启动
    node index.js
  • 使用nodemon热更新启动
npm install nodemon -g

npm run dev
  •   ⚡ 使用 pm2 部署守护启动(上云服务器时,推荐该种方法)       
npm install pm2 -g

npm run build

        3.1.2 docker 部署(Linux 为例)

        ⭕ 确保已安装docker + docker-compose

         1.配置 docker 网络

  如果只需部署node 服务器,请将docker-compose.yml文件中的vue部分注释

docker network create --driver bridge --subnet 172.22.9.0/24 --gateway 172.22.9.1 mynet
        2.一键部署
docker-compose up -d

        3.2 vue 前端页面部署

        tips:会调试和部署Vue项目的读者可自行操作

         3.2.1 手动 dev 版前端部署

         1.依赖安装
cd ./vue
npm install vue2 @vue/cli -g
npm install
         2.启动 vue 开发服务器
npm run serve
         3.浏览器访问
http://IPV4地址:端口号(VUE_PORT)
eg:
http://127.0.0.1:8080

        3.2.2 docker dev 版前端部署

        ⭕ 确保已安装docker + docker-compose

         1.配置 docker 网络

如果只需部署vue dev 版前端,请将docker-compose.yml文件中的node部分注释

docker network create --driver bridge --subnet 172.22.9.0/24 --gateway 172.22.9.1 mynet
         2.一键部署
docker-compose up -d

        3.2.3 手动 上云 prod 版前端部署

         1.修改配置文件

  修改vue/package.json 的如下代码,使用自己服务器的用户名 + IP 地址替换原 scp 命令的参数

  eg: dragon@192.168.1.22 (表示 用户名 dragon IP 地址:192.168.1.22)

 "push": "npm run build && scp -r dist/* dragon@192.168.1.22:/home/dragon/dist"
         2.安装 + 配置 nginx ⭐

        参考

         3.打包部署
cd ./vue

npm run push

        3.3 参数说明

        3.3.1 node 服务器配置参数

        详见:

Node服务器参数说明icon-default.png?t=O83Ahttps://github.com/A164759920/I_Goto_Library/blob/main/nodeServer

         3.3.2 vue 配置参数

/vue/src/components/HelloWorld.vue 的 data 中的 DOMAIN 配置为自己服务器的域名

  data: function () {

      return {

          DOMAIN: "https://test.api.baidu.top", // 配置服务器域名

          newCookie: "",

          ....

  },

        3.3.3 docker 配置参数

.env文件中即为 docker-compose所需参数:

NODE_PORT = "8899" # 服务器的端口号
VUE_PORT = "8080" # dev 开发环境下 vue 的端口号

#❗开启 HTTPS 后**,SSL 证书的配置参考nodeServer和nginx文件夹下的说明
IS_HTTPS = "off" # "on" 开启 HTTPS / "off" 关闭 HTTPS

4.补充说明

4.1 关于是否能抢到预约座位?

作者在部署和维护运行项目的七八个月内,基本都能准时抢到座位,但是遇到特别热门的座位,实际测试情况下手动抢可能更快(当然你也可以手动调快程序的速度再试一试),本项目更多只作为辅助.

4.2 关于部署的问题?

🔊【2024.12.22】因为近年G信B的政策调整,现在腾讯SCF已不再支持无域名公网访问, 该方法不再推荐。

如果自己并没有已备案的域名或云服务器来部署配套前端页面和 Node 服务器,可以试一试使用腾讯云serverless(可参考我的另一篇博客),通过配置 yml 文件一键部署,可省去域名备案和繁琐的配置,直接部署可公网访问的网站,有需求的可与我取得联系

Vue - 使用 腾讯云SCF部署Vue项目(支持GitHub Action)_腾讯云上上部署vue项目-CSDN博客

4.3 GITHUB仓库访问不了?

可使用watt Toolkit中的GitHub加速功能,实测有效

若在部署过程中遇到其他任何问题,欢迎与我取得联系,😊😊

该项目后续可能还有几个小功能完善,可关注项目仓库

### 郑州财经学院图书馆预约自动化脚本 实现郑州财经学院图书馆预约自动化脚本可以通过 Python 编程语言完成。Python 提供了许多强大的库来处理网络请求和数据解析,例如 `requests` 和 `BeautifulSoup`[^2]。 #### 技术栈介绍 为了构建这样的自动化脚本,可以采用以下技术栈: - **Requests**: 用于发送 HTTP 请求并获取网页内容。 - **BeautifulSoup (bs4)**: 解析 HTML 页面结构以便提取所需的数据。 - **Selenium**: 如果目标网站依赖 JavaScript 动态加载内容,则 Selenium 是更合适的选择,因为它能够模拟浏览器行为[^3]。 以下是基于上述工具的一个简单示例: ```python import requests from bs4 import BeautifulSoup def login_and_reserve(username, password): session = requests.Session() # 登录页面 URL login_url = 'https://library.zcu.edu.cn/login' # 构造登录表单参数 payload = { 'username': username, 'password': password } # 发送 POST 请求进行登录 response = session.post(login_url, data=payload) if response.status_code != 200: raise Exception('Login failed') # 获取预约页面的内容 reserve_page_url = 'https://library.zcu.edu.cn/reserve_seat' page_content = session.get(reserve_page_url).text soup = BeautifulSoup(page_content, 'html.parser') # 假设我们需要找到某个特定 ID 的位按钮 seat_button = soup.find('button', {'id': 'seat_123'}) if not seat_button: print("Seat is already taken or unavailable.") return False # 模拟点击该按钮的动作(实际可能涉及额外 AJAX 请求) reservation_result = session.post(seat_button['data-action-url']) if reservation_result.json().get('success'): print(f'Seat reserved successfully for {username}') return True else: print('Failed to reserve the seat.') return False if __name__ == "__main__": success = login_and_reserve('your_username', 'your_password') ``` 此代码仅为概念验证性质,在真实环境中还需要考虑更多细节,比如异常处理、验证码识别等问题[^4]。 如果目标系统使用了复杂的动态交互机制或者图形验证码保护措施,则推荐改用 Selenium 来代替 Requests/BeautifulSoup 组合。下面是一个简单的 Selenium 实现片段: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() try: driver.get("https://library.zcu.edu.cn/") elem_user = driver.find_element_by_name("username") elem_pass = driver.find_element_by_name("password") elem_user.send_keys("your_username") elem_pass.send_keys("your_password") elem_pass.send_keys(Keys.RETURN) finally: input() # Keep browser open until user presses Enter. driver.quit() ``` 以上两种方法各有优劣,请根据实际情况选择合适的方案实施开发工作。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值