MENU

HomeworkManager 部署与使用指南

• October 27, 2022 • 编程心得,技术分享阅读设置

引子

随着大学逐渐推进数字化课堂,许许多多的课堂作业开始要求在线上提交,对于计算机相关的专业更是如此。然而,许许多多的作业平台都缺少统一的作业提醒,导致学生必须养成日常在多个作业平台上查询作业信息,非常地不方便。

什么是 HomeworkManager

HomeworkManager 是基于 Python 编写的个人作业计划整理系统。它具有以下优点:

  • 自动化的网页作业平台信息爬取(网页爬虫)
  • 基于微软账户的日程管理(支持 Windows 原生日历应用和 Outlook 等)
  • 无人托管的友好设计
  • 基于 AES 的本地密码加密,多设备迁移也不会导致托管的账户密码泄密(当然你要把设备借给别人那就会泄密了)
  • 易于拓展和模块化设计,基于原有代码可以快速构建新平台的爬取器
  • 开发者也在使用此程序,因此你的 Issue 和 PR 会被快速处理

如果你已经深受多作业平台之苦或者对此项目抱有兴趣,不妨前来一试。

为 HomeworkManager 准备运行环境

HomeworkManager 并不是一个打包好的二进制程序文件,而是一套 Python 项目源码。这样做的理由是尽可能地赋予用户对整个 HomeworkManager 项目的完全掌握,甚至赋予用户改进它的可能——“来自社区,服务社区。”

安装 Python 环境

既然是 Python 源代码,自然也需要 Python 语言的编译环境。关于安装 Python 的指南,你可以参考 菜鸟教程的文章

不过,需要你注意的是,HomeworkManager 需要至少 Python 3.9 以上的环境才能正常运行,更低的版本会导致后续依赖不能正常工作。

至少在目前,HomeworkManager 只在 Windows 环境下正常工作。虽然它被设计为无人托管友好型程序,同时也允许 Python 的跨平台编译,但是 HomeworkManager 现在还没有为纯命令行环境准备好,如果你决定这么干,最好做好准备。

安装项目依赖包

调出你的命令行窗口,输入以下命令:

pip install pycryptodome requests playwright pyautogui wmi

等待全部项目依赖安装完毕,再为 playwright 爬虫程序初始化:

python -m playwright install

至此项目依赖安装完成,接下来是获取 HomeworkManager 项目。

获取 HomeworkManager 项目文件

HomeworkManager 提供两种方式来获取其项目文件——代码仓库打包下载

使用 git 版本控制器访问代码仓库来管理 HomeworkManager (推荐)

使用版本控制器来获取和管理 HomeworkManager 可以方便地更新项目,同时为你自行改动做好准备。要使用 git 工具,你应了解相关知识并配置好相关环境后再执行下面的步骤。

打开命令行,从仓库获取代码并存储到本地:

git clone https://github.com/BiDuang/HomeworkManager.git

后续如果你要更新项目,只需要

git pull https://github.com/BiDuang/HomeworkManager.git

下载已经打包的项目代码

如果你不会使用 git 工具或访问 Github 站点遇到困难,可以下载已经打包好的代码

初始化 HomeworkManager

拿到项目代码后,HomeworkManager 不能开箱即用。因为每个用户计划追踪的课程不一定一致,同时 HomeworkManager 需要保存用户在不同平台的账户密码以便无人值守访问,在第一次运行 HomeworkManager 时你需要为其初始化。

授权须知

如你所知, HomeworkManager 需要你授予微软账户访问许可。为保证无人值守功能正常,HomeworkManager 会自动向程序授予以下权限:
权限列表
你随时可以在此页面撤销对 HomeworkManager 的授权,本程序是隶属 Friendship Cloud 的一部分(虽然并不服务于朋友船船员)。
关于 Friendship Studio 的用户协议隐私政策,请点击链接查看。
如果你继续使用本程序或对其进行修改再分发等行为,则视为你已经阅读并同意以上协议。

在命令行内运行项目的Init.py文件(你应该已经把命令行目录切换到项目位置了吧?):

python Init.py

注意,初始化程序运行时你需要注意你任务栏是否有新窗口弹出,你最好看看这个新窗口是不是项目的下一步提示。有些操作需要你手动完成,并且如果你完成得过慢可能会触发错误

按照向导程序完成记录,你会发现目录下多了一个 homeworkManager_info.json 文件,这就是你的个性化设置。

运行 HomeworkManager

命令行执行:

python main.py

程序执行完成后,你会发现你的日历表里多了很多作业日程。从此以后你就无需因为下一次作业什么时候交而每天查课程平台了。

不过,如果你把整个项目移动到了一个新的计算机环境,那么你需要重新配置。如果你准备沿用你的课程追踪设置,可以保留 homeworkManager_info.json,但是你需要重新输入你的密码,因为你存储在上一个计算机的密码无法在此计算机自动解密,命令行执行迁移程序:

python Platform_Reset.py

无人值守设置

如果你希望这个程序能自动运行,可以在 Windows 上设置计划任务

  • 点击你计算机左下角的搜索,输入“任务计划程序”并进入。
  • 点击左侧的“创建任务”
  • 根据自身需求完成各个板块的设置,触发器的条件根据你的喜好,不建议过于频繁。操作则将启动程序的命令行复制进去,起始于填写你的项目根目录。(最好项目文件也使用绝对路径)

当然,你不配置自动任务,每天手动执行一次,让他自动静默爬取也完全没有问题。

计划任务可能导致的问题

此处对于计划任务描述较为简陋,缺少基础的人可能无法理解。请不要随意使用此功能。同时,使用计划任务可能导致在非预期的时段计算机出现意外窗口,影响正常工作或学习!如果不是托管的服务器设备,请谨慎配置!


错误排查

以下是此项目常见的一些错误以及解决办法:

运行时出现 TimeOutError:

你运行程序的时候网络条件比较差或者某操作超时。
尝试更换网络环境以及重新启动程序。

运行时出现 FileNotFoundError 或 KeyNotFound 等定位错误:

检查 homeworkManager_info.json 内容是否正常,如果为空或者内容错误,删除此文件后重新初始化项目(运行Init.py)。
如果你没有正确地完成初始化程序,也会导致此错误。

针对于 PwdCrypto 模块的 KeyNotFound (显示为id字段):

你更换设备后没有重新配置本地密码,AES加密后的字符串在此设备无法解密。
请运行 Platform_Reset.py

程序常卡在某一进度无反应:

将相应模块的 browser = playwright.firefox.launch(headless=True) 一句的改为 browser = playwright.firefox.launch(headless=False) 观察可视化的浏览器窗口操作,是否与预期一致。

微软日历初始化错误:

运行 Init.py 前先删除日历中已存在的“作业日程_HomeworkManager”日历(右击删除)。


如果没有你遇到的问题,或你有建议提出,欢迎在项目页面提出 Issue 甚至是 Pull-Request!也可以在评论区提出,我会尽快回复!

项目页面,基于 Apache-2.0 license 开源:

祝你使用愉快,希望这个程序能帮助到你!