当前位置: 首页 > news >正文

使用 Tkinter + Requests 实现地理信息安全系统学习时长助手

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

 

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈
🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

一、整体功能概述

二、核心技术栈

三、功能模块解析

1. GUI 构建

2. 验证码获取与展示

3. 登录逻辑

4. 自动刷时长逻辑

5. UI 状态机

四、实现效果

五、总结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[使用 Tkinter + Requests 实现地理信息安全系统学习时长助手]
❤博主广交技术好友,喜欢文章的可以关注一下❤

        在在线学习系统中,学习时长往往是课程考核的关键指标。但手动挂机学习效率低,且需要不断点击页面保持在线。本文将介绍如何利用 Python 的 Tkinter GUI 库Requests 网络请求库,编写一个自动化的“学习时长助手”,实现自动登录、验证码识别与刷新,以及后台定时提交学习时长。

注:该程序用于网站(https://gistraining.webmap.cn/)的自动增加学习时长.

一、整体功能概述

本文的完整程序实现了以下功能:

  1. 图形化界面:基于 Tkinter 构建,用户可通过界面输入用户名、密码、验证码。

  2. 验证码获取与刷新:支持从服务器获取验证码图片,展示在 GUI 中。

  3. 自动登录:支持输入账户信息后自动登录,并校验返回结果。

  4. 时长刷课:后台线程定时向服务器提交学习时长请求。

  5. 进度显示:通过进度条和标签展示当前已刷学习时长与目标时长。

  6. 状态管理:应用有完善的状态机机制,保证不同阶段界面控件可用性合理切换。

最终效果是:用户登录成功后,点击“开始刷时长”,程序将自动向服务器提交学习时长请求,并动态更新 UI。


二、核心技术栈

  • Tkinter:Python 标准库中的 GUI 工具包,适合快速开发桌面工具。

  • Requests:Python 最常用的 HTTP 请求库,用于和学习平台进行交互。

  • Pillow (PIL):用于处理验证码图片,方便在 Tkinter 中显示。

  • 多线程 + 队列:利用 threading.Threadqueue.Queue 实现异步网络请求,避免阻塞 GUI。

  • 状态机模式:通过 set_ui_state 方法集中管理控件状态,逻辑清晰。


三、功能模块解析

1. GUI 构建

主界面由 三个主要区域组成:

  • 登录区:输入用户名、密码、验证码,并支持刷新验证码。

  • 控制区:设置请求间隔,开始或停止“刷时长”。

  • 进度区:显示已学习的时长和进度条。

示例代码:

login_frame = ttk.LabelFrame(main_frame, text="登录", padding="10")
self.username_entry = ttk.Entry(login_frame)
self.password_entry = ttk.Entry(login_frame)
self.captcha_entry = ttk.Entry(login_frame)
self.captcha_image_label = ttk.Label(login_frame)

这里我们利用 ttk.LabelFrame 分组,条理清晰,用户操作直观。


2. 验证码获取与展示

验证码获取逻辑通过单独的线程运行,避免阻塞 GUI:

def _fetch_captcha_worker(self):response = self.session.get(self.URL_CAPTCHA, timeout=10)if response.status_code == 200:self.queue.put({"type": "captcha_image", "data": response.content})

取回图片后,通过 Pillow 转换为 ImageTk.PhotoImage 并展示:

image = Image.open(BytesIO(image_data))
self.captcha_photo = ImageTk.PhotoImage(image)
self.captcha_image_label.config(image=self.captcha_photo)

这样用户无需刷新页面,即可获取最新验证码。


3. 登录逻辑

程序将密码进行 Base64 编码,并提交到服务器:

encoded_password = base64.b64encode(password.encode('utf-8')).decode('utf-8')
data = {'args[username]': username,'args[userpassword]': encoded_password,'args[randcode]': captcha,'userlogin': '1','userhash': str(time.time())
}
response = self.session.post(self.URL_LOGIN, data=data, timeout=10)

这里特别注意:

  • 使用 requests.Session() 保持会话,避免重复登录。

  • 登录结果通过 消息队列传递给主线程,保证 Tkinter 线程安全。


4. 自动刷时长逻辑

核心逻辑在 worker_function 方法中实现:

  • 每隔一定秒数,向学习平台发送一次学习时长请求。

  • 若请求成功,学习总时长 +1 并更新进度条。

while not self.stop_event.is_set() and self.total_minutes < self.target_minutes:response = self.session.post(self.URL_STUDY, headers=headers, data=data, timeout=10)if response.status_code == 200:self.queue.put("success")

通过 threading.Event 控制线程停止,确保用户点击“停止”后立即终止后台任务。


5. UI 状态机

不同阶段控件状态不同,例如:

  • 登录前:用户名、密码、验证码可编辑;

  • 登录中:所有控件禁用,避免重复点击;

  • 登录成功:学习控制按钮启用;

  • 刷课中:仅允许“停止”按钮可点击。

代码:

states = {'IDLE': {...},  # 登录前'LOGGING_IN': {...},  # 登录中'LOGGED_IN': {...},  # 登录成功'RUNNING': {...},  # 刷课中'STOPPED': {...},  # 刷课已停止
}

这种状态机模式比直接在各处 config(state=...) 更清晰、更易维护。


四、实现效果

五、总结

通过本项目,不仅实现了一个实用的“学习时长助手”,还系统性地运用了以下技术点:

  • Tkinter GUI 设计与控件布局

  • Requests 会话管理与 POST 请求

  • 多线程与队列结合,解决 Tkinter 线程安全问题

  • 状态机模式简化复杂 UI 控件管理

声明:代码在上方资源处获取,仅作为学习用途,请勿用作非法用途,还是提倡认真学习!


文章转载自:

http://uU1tVHbC.psxcr.cn
http://UTCS7UYI.psxcr.cn
http://zlmFsaoA.psxcr.cn
http://0ocSvkHa.psxcr.cn
http://SmCCyhw4.psxcr.cn
http://UtazoSMP.psxcr.cn
http://b3PGN8LT.psxcr.cn
http://Sgqpss1A.psxcr.cn
http://ZUgAkTuV.psxcr.cn
http://pCrY77qt.psxcr.cn
http://jmUfmgg8.psxcr.cn
http://YN8VFkCb.psxcr.cn
http://M1hCI2sI.psxcr.cn
http://3uBMkkA8.psxcr.cn
http://ZHY3NTyg.psxcr.cn
http://zrc3SsZm.psxcr.cn
http://WJNtpEDj.psxcr.cn
http://RQ9zscKr.psxcr.cn
http://OcAyL24v.psxcr.cn
http://iR8v3un4.psxcr.cn
http://BFfTmM8Y.psxcr.cn
http://6yFjktsd.psxcr.cn
http://Kkv5JglV.psxcr.cn
http://096MTIwS.psxcr.cn
http://e6p4lu2a.psxcr.cn
http://qMy1Eh5C.psxcr.cn
http://BCLmHfAF.psxcr.cn
http://Hc0MerR7.psxcr.cn
http://vR9S2R4K.psxcr.cn
http://gQ9jNveU.psxcr.cn
http://www.dtcms.com/a/378272.html

相关文章:

  • 多语言共享贩卖机投资理财共享售卖机投资理财系统
  • 京东JDS 测评图形规律题答题技巧
  • 打工人日报#20250911
  • 一、WPF入门介绍+Grid和StackPanel布局介绍+实战模拟Notepad++页面布局
  • 电商平台用户流失预测与干预机制
  • 华为网路设备学习-33(BGP协议 八)BGP路由 选路规则
  • 【科研绘图系列】R语言绘制海洋微生物群落动态分析
  • 基于微服务架构的电商返利APP技术架构设计与性能优化策略
  • Java开发入门指南:IDE选择与数据库连接详解
  • 【算法】栈专题
  • hadoop的api操作对象存储
  • 硬件开发_基于物联网的沼气池环境监测系统
  • 水质在线监测系统御控物联网解决方案
  • A股大盘数据-20250911分析
  • 【星海出品】rabbitMQ - 叁 应用篇
  • 【npm】npm 包更新工具 npm-check-updates (ncu)
  • pnpm相对于npm,yarn的优势
  • vue3源码学习(四)watch 源码学习
  • 利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
  • 短剧小程序系统开发:打造个性化娱乐新平台
  • 从MySQL到StarRocks:全量与增量同步的最佳实践
  • 第七篇:识破“共因失效”——如何阻止汽车系统的“团灭”危机
  • SSL部署完成,https显示连接不安全如何处理?
  • Java 与 AI 生态:深度学习框架的支持现状
  • Linux iptables 实战:配置 NAT 端口转发访问内网 MySQL
  • docker,自定义镜像dockerfile
  • 分布式专题——9 Redis7底层数据结构解析
  • WPF 数据绑定模式详解(TwoWay、OneWay、OneTime、OneWayToSource、Default)
  • 前端埋点系统架构设计与优化实践
  • SEO新手入门:什么是SEO及其作用