北京大学出入校备案自动化(2021 版)

教程

TL; DR

程序根据提供的个人信息,按照设置的运行频率,自动通过服务器填写备案表格。有效防止因一天忘记填写而导致一周不能出门。特别是对于每天住校外、需要实习科研两点一线的同学,程序便能节省每日重复备案的时间,以及万一忘记备案的风险。

前两天,学校就有 1000 人因忘记备案无法出入校。据说,部分同学还因此无法出席考试。

pku-auto-beian-form.001

读者无需在自己电脑运行程序,脚本会在云端自动启动。GitHub Actions 提供免费云端服务器实例。

步骤:

  1. Fork 自动报备程序
  2. 填入个人信息
  3. 设置运行频率
  4. 运行 Workflow

按照教程,新手大约耗时 10 分钟完成设置。

另外,今天学校上线了「未备案微信提醒」。订阅后,系统将在每天晚上十点,通过学校公众号提醒进行未备案的同学进行出入校备案。

school-wechat-notification

微信提醒和自动脚本配合,完美的双重保险。建议同学打开订阅提醒。

Fork 和填入个人信息

首先,你需要一个 GitHub 账号。如果你没有,请先 注册,并且完成邮箱验证。

登陆 GitHub 后,打开 @xiazhongyv 创建的 PKUAutoSubmit_online repo,点击右上角的 fork。

image-20211117135745851

Secrets

Fork 好之后,接下来填写个人信息,用于登陆 Portal 和填写出入校备案表格。这些信息以加密 Secrets 形式存储。安全。

点击 SettingsSecretsNew repository secret 从而添加 Secrets。

iShot2021-11-15 22.50.08

Name Value(示例) 备注
ID 1900012345 输入学号
PASSWORD "A31!(e32/pa)" 登陆 Portal 的密码,如果有特殊字符,需要使用 " " 包裹密码
MAIL_ADDRESS 1900012345@pku.edu.cn 输入电子邮箱地址
PHONE_NUMBER 19812345678 输入手机号码
SENDKEY blablabla 如果不需要微信通知,乱填点东西即可。

这个视频以添加学号和密码为例。按照上方表格,对应填入 Name(e.g. ID) 和 Value(e.g. 1900012345)。每填入一行,便点击 「Add secret」,然后再点 「New repository secret」。读者请把 Value 列的数据改成自己的信息。

IDPASSWORDMAIL_ADDRESSPHONE_NUMBERSENDKEY 都添加成功后,应有以下五个绿色 Secrets。如果在填写过程出现手误,可以点击右边的对应 Secrets 右方的 「Update」 更新数值。

image-20211117143435007

修改 config.ini

回到 Code 标签页,点击 config.ini

image-20211117151847479

点击铅笔按钮,按照读者的备案信息,记得修改。 这些信息是读者希望在备案表格中填写的信息。

image-20211117152008909

本教程不覆盖如何实现 Server 酱微信通知。请把「是否需要微信通知」的 True 设置为 False

设置运行频率

接下来,我们要设置脚本运行的周期—— cron。实现在特定的时间自动执行备案程序。

回到 Code 标签页。

image-20211117145919954

如视频那样,进入 .github/workflows/main.yml ,点击右边的修改按钮(铅笔模样✏️)。

cron 后面看到我设置了 '30 6 * * *',也就是每天 UTC+0 的早上六点半执行程序。Crontab.guru 用简单易懂的交互界面 解释了 cron。

'* * * * *' 一共有五位,分别代表分钟、小时、日、月、星期几。举个例子:

  • 0 0 * * * —— 每天 UTC 午夜执行程序。
  • 0 6,18 * * * —— 每天在 UTC 上午6点和下午6点执行程序。
  • 0 0 * * 2 —— 每周二的 UTC 零点执行程序。
  • 0 0 * * 2,3,4 —— 每周二、三、四的 UTC 零点执行程序。

文档里,默认设置是 cron: '0 4 * * 3,4,5' ,也就是每周三、周四、周五的 UTC 四点(北京时间中午 12 点)执行程序。

你可以设置成自己希望的时间。要注意的是,时间的时区为 UTC,和北京时间差八个小时。

运行 Workflow

去 Actions 标签页。

如果遇到询问,请允许在 forked 库运行工作流 (点绿色框)。

Allow workflow

如果看到 ⚠️ 警告标示,请允许「Enable workflow」。

Enable workflow

一切完成后,理论上脚本会按照设置的 cron 频率去执行。以防万一,我们手动运行脚本,看看有没有出错。

点击 All workflows 下的 PKUAutoSubmit,然后 Run workflow。

Run workflow

手动运行后,会看到 event 开始转圈。

运行失败的话,会有红色 ❌。

image-20211117153416276

我遇到的第一个问题是,因为密码复杂,需要使用双引号 "" 前后包裹密码。正如在前文的 Password 行的备注所说。

登陆 Portal 的密码,如果有特殊字符,需要使用 " " 包裹密码

修改 Password Secret 后,再次运行,还是出现错误。原来是学校在登陆 Portal 时,会遇到让你关注公众号的弹窗,影响了脚本的运行。只需要登陆 Portal,关注了学校的公众号,之后就不会有弹窗了。搞定!

请手动登录下门户,检查下是否会弹出人脸验证授权,这个授权页面会干扰程序运行,它只会在门户显示一次,处理后重新运行就好了。以及还有可能是微信扫码关注门户的页面,只要微信扫码关注了,就不会再弹出这个二维码页面了。

iShot2021-11-15 23.05.23

再次手动运行,没有问题。

image-20211117153858405

如何更新

学校的网页有时发生变化,软件特性也需要更改,这时我们需要更新脚本。

平时很少需要 Fetch and merge。只有出了问题才需要更新。所以打开学校的「微信未备案提醒」很有需要,万一软件出了问题,你手机会收到没有备案的提醒。

11.26更新:Github Actions环境的Chrome更新了,旧版本不能用了,请大家Fetch and merge upstream最新版本。现在更新为了使用最新driver,以后不会再出现driver版本的问题了~

重要提醒:如果你是Fetch and merge upstream了新版本,更新之后请务必不要忘记改 config.ini 以及workflow 下的 corn 表达式!

这里我建议,先把 config.ini.github/wordflows 里的 cron 复制黏贴到本地备忘录软件。对下一步有帮助。

你需要 Fetch and merge。

image-20211127105417067

完成后,「Fetch and merge」图标会变灰。

image-20211127110558326

检查 config.ini 和运行频率 「cron」 表达式。如果有不正确,参考复制下来的内容,按需修改。前文有提到修改什么、如何修改,这里不再赘述。

结语

我现在设置为每天中午自动备案。用学校今天推出的公众号未备案提醒作为第二重保险,万一脚本出错了,晚上十点钟会收到提醒让我要记得备案。

image-20211117191622670

如果你遇到其他问题,请查看原 repositary 的 Q&A 部分。实在无法解决,可以提交 Issues 或者 发邮件 问我也可以。

如果文章对你有用,请不要吝惜于分享给同学,帮助更多的人。

参考: