TL; DR
程序根据提供的个人信息,按照设置的运行频率,自动通过服务器填写备案表格。有效防止因一天忘记填写而导致一周不能出门。特别是对于每天住校外、需要实习科研两点一线的同学,程序便能节省每日重复备案的时间,以及万一忘记备案的风险。
前两天,学校就有 1000 人因忘记备案无法出入校。据说,部分同学还因此无法出席考试。
读者无需在自己电脑运行程序,脚本会在云端自动启动。GitHub Actions 提供免费云端服务器实例。
步骤:
- Fork 自动报备程序
- 填入个人信息
- 设置运行频率
- 运行 Workflow
按照教程,新手大约耗时 10 分钟完成设置。
另外,今天学校上线了「未备案微信提醒」。订阅后,系统将在每天晚上十点,通过学校公众号提醒进行未备案的同学进行出入校备案。
微信提醒和自动脚本配合,完美的双重保险。建议同学打开订阅提醒。
Fork 和填入个人信息
首先,你需要一个 GitHub 账号。如果你没有,请先 注册,并且完成邮箱验证。
登陆 GitHub 后,打开 @xiazhongyv 创建的 PKUAutoSubmit_online repo,点击右上角的 fork。
Secrets
Fork 好之后,接下来填写个人信息,用于登陆 Portal 和填写出入校备案表格。这些信息以加密 Secrets 形式存储。安全。
点击 Settings
— Secrets
— New repository secret
从而添加 Secrets。
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 列的数据改成自己的信息。
把 ID
、PASSWORD
、MAIL_ADDRESS
、PHONE_NUMBER
、SENDKEY
都添加成功后,应有以下五个绿色 Secrets。如果在填写过程出现手误,可以点击右边的对应 Secrets 右方的 「Update」 更新数值。
修改 config.ini
回到 Code 标签页,点击 config.ini
。
点击铅笔按钮,按照读者的备案信息,记得修改。 这些信息是读者希望在备案表格中填写的信息。
本教程不覆盖如何实现 Server 酱微信通知。请把「是否需要微信通知」的 True
设置为 False
。
设置运行频率
接下来,我们要设置脚本运行的周期—— cron
。实现在特定的时间自动执行备案程序。
回到 Code 标签页。
如视频那样,进入 .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 库运行工作流 (点绿色框)。
如果看到 ⚠️ 警告标示,请允许「Enable workflow」。
一切完成后,理论上脚本会按照设置的 cron
频率去执行。以防万一,我们手动运行脚本,看看有没有出错。
点击 All workflows 下的 PKUAutoSubmit
,然后 Run workflow。
手动运行后,会看到 event 开始转圈。
运行失败的话,会有红色 ❌。
我遇到的第一个问题是,因为密码复杂,需要使用双引号 ""
前后包裹密码。正如在前文的 Password
行的备注所说。
登陆 Portal 的密码,如果有特殊字符,需要使用
"
"
包裹密码
修改 Password
Secret 后,再次运行,还是出现错误。原来是学校在登陆 Portal 时,会遇到让你关注公众号的弹窗,影响了脚本的运行。只需要登陆 Portal,关注了学校的公众号,之后就不会有弹窗了。搞定!
请手动登录下门户,检查下是否会弹出人脸验证授权,这个授权页面会干扰程序运行,它只会在门户显示一次,处理后重新运行就好了。以及还有可能是微信扫码关注门户的页面,只要微信扫码关注了,就不会再弹出这个二维码页面了。
再次手动运行,没有问题。
如何更新
学校的网页有时发生变化,软件特性也需要更改,这时我们需要更新脚本。
平时很少需要 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。
完成后,「Fetch and merge」图标会变灰。
检查 config.ini
和运行频率 「cron」 表达式。如果有不正确,参考复制下来的内容,按需修改。前文有提到修改什么、如何修改,这里不再赘述。
结语
我现在设置为每天中午自动备案。用学校今天推出的公众号未备案提醒作为第二重保险,万一脚本出错了,晚上十点钟会收到提醒让我要记得备案。
如果你遇到其他问题,请查看原 repositary 的 Q&A 部分。实在无法解决,可以提交 Issues 或者 发邮件 问我也可以。
如果文章对你有用,请不要吝惜于分享给同学,帮助更多的人。
参考:
- 题图使用了 Markus Leo 分享到 Unsplash 的照片作为背景