米醋电子工作室 MCU Electronics Studio

米醋嵌入式AI+
不为嵌入式AI赚钱,以培养新一代嵌入式AI工程师为己任

校园通知爬虫 + 多渠道推送系统

自动爬取高校网站通知公告,通过 QQ 邮件/钉钉/飞书多渠道推送,支持 GitHub Actions 云端定时运行

Host GitHub
Authors 2903537389
Category Tool
Status 进行中
Last commit 5 个月前
Updated 2026-05-21
Tags 爬虫通知推送PlaywrightGitHub Actions邮件钉钉

自动爬取高校网站通知公告,通过邮件/钉钉/飞书推送到你的设备。

功能特性

  • 多站点支持:可同时监控多个学院/部门的通知页面
  • 智能去重:基于 URL 的历史记录,同一条通知不会重复推送
  • 多渠道推送:支持 QQ 邮件、钉钉机器人、飞书机器人
  • 定时运行:支持 GitHub Actions(免费云)或 Windows 计划任务
  • 反爬绕过:使用 Playwright 持久化浏览器,通过 WAF 检测
  • 通用适配:更换配置中的 URL 和匹配规则即可适配任意高校网站

项目结构

├── main.py                  # 程序入口
├── config.yaml              # 配置文件(网站、推送渠道等)
├── requirements.txt         # Python 依赖
├── run.bat                  # Windows 一键运行脚本
├── setup_task.ps1           # Windows 计划任务注册脚本
├── .gitignore
├── .github/workflows/       # GitHub Actions 定时运行配置
│   └── schedule.yml
├── notifier/                # 推送模块
│   ├── __init__.py
│   ├── email_sender.py      # 邮件推送(QQ 邮箱 SMTP)
│   └── dingtalk.py          # 钉钉机器人推送
└── storage/                 # 去重存储模块
    ├── __init__.py
    └── history.py           # 基于 JSON 的推送历史管理

快速开始

1. 环境准备

# 安装 Python 依赖
pip install -r requirements.txt

# 安装 Chromium 浏览器(Playwright 需要)
playwright install chromium

2. 配置推送渠道

编辑 config.yaml,至少配置一种推送方式:

邮件推送(推荐,免费)

channels:
  email:
    enabled: true
    smtp_server: smtp.qq.com
    smtp_port: 465
    sender_email: "your_email@qq.com"       # 你的 QQ 邮箱
    sender_password: "your_smtp_code"       # QQ邮箱授权码(非登录密码)
    recipients:
      - "receiver@qq.com"                   # 收件人

获取 QQ 邮箱授权码:登录 QQ 邮箱 → 设置 → 账户 → POP3/SMTP 服务 → 开启并生成授权码

钉钉机器人(可选)

channels:
  dingtalk:
    enabled: true
    webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
    secret: "your_secret"             # 安全设置→加签

飞书机器人(可选)

channels:
  feishu:
    enabled: true
    webhook: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"

3. 运行

python main.py

首次运行时会自动打开 Chrome 浏览器窗口(用于通过 WAF 验证),后续运行会复用浏览器数据。

环境变量(安全推荐)

为避免在配置文件中明文存储敏感信息,可通过环境变量覆盖:

环境变量对应配置说明
EMAIL_SENDERchannels.email.sender_email发件邮箱
EMAIL_PASSWORDchannels.email.sender_passwordSMTP 授权码
EMAIL_RECIPIENTSchannels.email.recipients收件人,逗号分隔
DINGTALK_WEBHOOKchannels.dingtalk.webhook钉钉 Webhook 地址
DINGTALK_SECRETchannels.dingtalk.secret钉钉加签密钥
FEISHU_WEBHOOKchannels.feishu.webhook飞书 Webhook 地址

环境变量优先级高于 config.yaml 中的值。

定时运行

方式一:GitHub Actions(推荐,免费)

将项目推送到 GitHub 仓库后,由 GitHub 的云端服务器每天自动运行爬虫,无需你自己开电脑。

工作流说明(.github/workflows/schedule.yml):

环节说明
定时触发每天北京时间 8:00 和 14:00 自动执行,也可在 GitHub 网页上手动触发
安装环境在 Ubuntu 虚拟机上自动安装 Python、Playwright、Chromium 浏览器
运行爬虫使用仓库 Secrets 中的邮箱密码等敏感信息运行 python main.py,推送通知
保存历史爬完后自动提交 history.json 变更并推送回仓库,确保不会重复推送同一条通知

配置步骤:

  1. 将项目推送到 GitHub 仓库
  2. 在仓库 Settings → Secrets and variables → Actions 中添加 Secrets:
    • EMAIL_SENDER、EMAIL_PASSWORD、EMAIL_RECIPIENTS 等
  3. 工作流默认每天北京时间 8:00 和 14:00 自动运行

注意:GitHub Actions 的虚拟机上没有可见的浏览器窗口,部分 WAF 严格的网站可能会拦截请求。如果你的目标网站属于这种情况,建议使用方式二(Windows 计划任务)。

方式二:Windows 计划任务

# 以管理员身份运行 PowerShell,执行:
.\setup_task.ps1

默认每天 12:00 和 22:00 运行。可在 setup_task.ps1 中修改时间。

适配其他高校

修改 config.yaml 中的 targets 配置即可:

targets:
  - name: 你的学校名称
    url: https://www.xxx.edu.cn/
    base_url: https://www.xxx.edu.cn
    list_pages:
      - url: https://www.xxx.edu.cn/index/tzgg.htm
        section: 通知公告
    link_patterns:
      - info/       # 通知详情页 URL 中特有的关键字
  • list_pages:要监控的通知列表页 URL
  • link_patterns:用于识别通知链接的 URL 关键字(如 info/、content.jsp)
  • lookback_days:只推送最近 N 天的通知(在 schedule 中配置)

依赖项

包名用途
playwright自动化浏览器,处理 JS 反爬
beautifulsoup4HTML 解析
lxmlHTML 解析加速
PyYAML配置文件解析

注意事项

  • 首次运行时会打开可见的 Chrome 窗口,这是为了通过网站 WAF 验证,之后会复用浏览器数据目录
  • history.json 记录已推送通知,不要手动删除(除非想重新推送历史通知)
  • QQ 邮箱 SMTP 授权码不是登录密码,需要在 QQ 邮箱设置中单独生成
  • GitHub Actions 运行时无法打开可见浏览器窗口,部分严格 WAF 站点可能拦截

License

MIT