一个 Manifest V3 浏览器扩展:在学校教学平台页面点击扩展按钮,抓取带截止时间的待办/作业,并生成可导入 Outlook、Apple Calendar、Google Calendar 等日历软件的 .ics 文件。
src/contentScript.js: 接收 popup 指令,从当前网页抓取待办。src/parser.js: 页面文本和截止时间解析器,支持自动识别和自定义 CSS 选择器。src/ics.js: 将抓取到的待办转换为.ics日历文件。src/background.js: 初始化和保存本地设置。src/popup.*: 抓取和下载.ics入口。src/options.*: 日程时长、提醒、标题前缀和选择器等选项。ucloud.bupt.edu.cn/uclass: 内置 BUPT uCloud 首页待办抓取策略,会优先读取“待办”卡片并处理1/2这类分页。
- 确认项目文件都在本目录下,不需要打包构建。
- Chrome 用户打开
chrome://extensions,Edge 用户打开edge://extensions。 - 打开右上角“开发者模式”。
- 点击“加载已解压的扩展程序”。
- 选择本项目根目录,也就是包含
manifest.json的目录。 - 固定工具栏里的扩展图标,方便在教学平台页面点击。
- 首次加载或修改代码后,如果扩展页提示需要刷新,点击扩展卡片上的刷新按钮。
- 打开
https://ucloud.bupt.edu.cn/uclass/#/student/homePage。 - 确认页面中能看到“待办”卡片。
- 点击扩展图标,先“抓取当前页面”,确认列表后点击“下载 .ics”。
- 双击下载得到的
.ics文件,或在 Outlook 中通过“添加日历/从文件导入”导入。
根据当前页面批注,插件会优先使用这些结构:
- 待办框:
div.in-progress-section.home-card - 每个待办:
div.in-progress-body > div.in-progress-item.home-inline-block - 分页控件:
div.in-progress-header .header-control
- 每个待办会生成一个
VEVENT。 - 默认导出为全天日程,日程日期取待办截止时间所在日期。
- 可在设置页关闭“导出为全天日程”,关闭后会导出为普通时间段日程。
- 普通日程的结束时间等于待办截止时间,开始时间默认为截止前 30 分钟,可在设置页调整。
- 默认提醒为日程开始前 60 分钟,可在设置页调整;设为
0则不写入提醒。 - 普通时间段日程以 UTC 写入
.ics,导入日历后会按本机或日历账户时区显示。 - 不需要 Microsoft Entra 应用、Client ID、Graph 权限或网页登录授权。
如果自动抓取不稳定,可以在设置页切换到“自定义 CSS 选择器”:
- 待办条目选择器:每个任务卡片/表格行的选择器。
- 标题选择器:在条目内部定位标题。
- 截止时间选择器:在条目内部定位截止时间。