2022年寒假使用Python开发的一款小工具
AutoReserver 自助预约软件
1. AutoReserver 是何方神圣?
AutoReserver 是使用python语言开发的自助预约小软件,用户通过简单的设置即可定时预约体育场地。

2. 为什么要开发它?
为了磨练和提高技术,把学习到的知识应用到实践中
为了用户能在懒觉后享受体育运动的快乐:grin:
3. 软件的基本结构

小工具采用客户端和服务端结合的基本结构。由客户端采集用户预约任务信息并以加密文本的形式上传到个人云服务器,服务器最终执行预约动作。
4. 技术要点总结
4.1 客户端
4.1.1 使用 PyQt6 设计 GUI 界面
python 貌似没有原生的GUI设计软件,所以我使用了 Qt Creator 搭配 PyQt6 设计GUI。
首先创建 Qt Creator 项目并可视化地进行界面设计

创建完成后,文件夹中会出现以 .ui
为后缀的文件,这个文件包含了界面的所有信息。但是python没办法直接使用 .ui
文件,我们需要用 PyQt 包中的 pyuic6
工具将 .ui
文件转换成对应的 .py
文件,命令如下
1 | pyuic6 -o ./ui_ReserveForm.py ./FirstQtProject/reserveForm.ui |
到这里界面就生成好了
4.1.2 QThread 解决界面卡死问题
PyQt 是单线程运行的,所以在执行耗时任务时界面会处于卡死状态,非常影响使用体验。
解决办法是将耗时任务放在子线程中执行,主线程负责更新界面信息。
具体代码:
1 | class LoginThread(QtCore.QThread): |
4.1.3 客户端登录 selenium 设置
1 | options = ChromeOptions() |
4.2 服务器端
4.2.1 inotifywait 监视 ftp 文件夹
客户端上传预约信息后,服务器端程序需要在第一时间监测到文件变化并创建预约任务。为此使用了Linux系统命令inotifywait监视接收ftp文件的文件夹。shell 脚本如下:
1 | !/bin/bash |
4.2.2 at 命令和 apscheduler 库结合以执行定时预约
inotifywait
监测到文件变化后会调用 fileWatchDog.py
脚本
在 fileWatchDog.py
脚本里读取用户上传的信息并使用 at
命令创建定时任务
at
创建的任务会在预约时间前5分钟调用脚本登录网站,等待最终预约
4.2.3 systemd 系统服务
服务器端的监听程序需要在后台运行,并且在程序崩溃或系统重启后重新运行,这可以用 systemd 实现
1 | [Unit] |
参考博客
参考书籍
[1]Ryan Mitchell.Python网络数据采集[M]. 北京:人民邮电出版社, 2016
[2]韦世东.Python3反爬虫原理与绕过实战[M]. 北京:人民邮电出版社, 2020
[3]王维波,栗宝鹃,张晓东.Python Qt GUI与数据可视化编程[M]. 北京:人民邮电出版社, 2019
[4]Richard Blum, Christine Bresnahan.Linux命令行与shell脚本编程大全[M]. 北京:人民邮电出版社, 2016
[5]Matt Frisbie.JavaScript高级程序设计[M]. 北京:人民邮电出版社, 2020
[6]Michael Fitzgerald.学习正则表达式[M]. 北京:人民邮电出版社, 2013
[7]结城浩.图解密码技术[M]. 北京:人民邮电出版社, 2016
[8]Eric Matthes.Python编程:从入门到实践[M]. 北京:人民邮电出版社, 2016