定时抓取广西大学教务系统(正方教务系统)成绩数据和最新学期考试安排,检测新成绩、成绩变动、新考试安排或考试安排变动,通过邮件发送通知。基于 Playwright + TypeScript,通过 crontab 定时执行。
- Node.js >= 22
- pnpm >= 9
- Playwright 浏览器(脚本自动安装)
# macOS
brew install node pnpm
# Linux (Debian/Ubuntu)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
corepack enable
corepack prepare pnpm@latest --activate
# 验证
node -v
pnpm -v# 克隆仓库
git clone https://github.com/wcqqq1214/gxu-score-script.git
cd gxu-score-script
# 安装依赖 & Playwright 浏览器
pnpm install
pnpm exec playwright install chromium
# Linux 需要安装系统依赖
npx playwright install-deps
# 配置环境变量
cp .env.example .env
# 编辑 .env 填写学号和密码
# 测试运行
pnpm test
# 正式运行
pnpm start创建 .env 文件:
GXU_STUDENT_ID=你的学号
GXU_PASSWORD=你的密码
SMTP_HOST=你的SMTP地址
SMTP_PORT=465
SMTP_USER=你的邮箱
SMTP_PASS=你的授权码
NOTIFY_EMAIL=接收通知的邮箱
LOG_LEVEL=日志等级: debug/info/warn/error,默认 infoSMTP 配置可选,不配置则仅在控制台输出通知。LOG_LEVEL=debug 会额外打印每条成绩/考试明细,适合排查问题。
pnpm start # 执行成绩和考试信息抓取、对比、通知
pnpm test # 测试模式:完整日志、不存数据
pnpm run lint # ESLint 检查
pnpm run format # Prettier 格式化
pnpm run typecheck # tsc 类型检查
pnpm run check # 提交前完整检查成绩历史保存到 data/grades.json,最新学期考试安排历史保存到 data/exams.json。首次生成对应历史文件时只保存数据,不发送旧数据通知。
通过 crontab 定时运行,每 30 分钟执行一次(8:00-22:00):
crontab -e添加以下配置:
*/30 8-22 * * * cd /你的项目路径 && (pkill -f 'chrome[-]headless-shell' || true) && NODE_OPTIONS='--dns-result-order=ipv4first --max-old-space-size=512' node --env-file=.env --import tsx/esm src/main.ts >> /var/log/gxu-score.log 2>&1TypeScript + Playwright + NodeMailer + crontab
MIT License