如何在手机上设置南大 APP 自动打卡(一)
Github 上 @cubiccm的打卡程序只实现了打卡的部分,登录部分还需要手动操作,并不能实现真正的自动化。所以我用 Python 实现了登陆部分,同时简化了一下 cubiccm 的代码,得到了一个完整的打卡程序。
电脑上运行
Python 程序文件可以从 我的 Gitee 仓库 获取。
将 daka.py
文件下载到本地后,把文件中的 username
,password
,location
改成自己的信息,使用:
1 | pip install requests lxml beautifulsoup4 pyexecjs |
安装用到的包,使用:
1 | python 文件所在路径 /daka.py |
执行文件,出现:
1 | 时间 + Report username 's health information successfully! |
表示打卡成功。可以利用 Windows 的计划任务来实现每天自动打卡。
到此,我们已经实现了自动打卡。
那么,如何用手机来自动打卡呢?我首先想到的是利用安卓上的自动化工具 Tasker,并且成功实现了打卡的部分,但是登陆的部分并没有找到合适的实现方法,这部分需要熟练使用 Tasker 的人来做了。然后我想到了 Termux,一个安卓上的 Linux 模拟器,用模拟器来运行 Python 程序实现自动打卡。
!!注意!!:以下方法有着复杂的流程和较高的代价,性价比较低,不如设置闹钟提醒打卡方便,只适合喜欢折腾或者有意愿在手机上运行 Python 代码的使用者。并且,由于需要 Python 与 Node.js 环境,所需空间大约为 800MB。不过,打卡程序实际上进行的是网络请求操作,如果只用 Node.js 来实现可能会节省 300MB-400MB 的空间,如果只用 Tasker 来实现,可能会节省 800MB 左右空间,并且 Tasker 有着更低的性能使用、更低的耗电量与更稳定的性能,但受限于我现在的技术水平,还不能用 Tasker 实现。
手机实现
安装 Termux
首先在手机上安装 Termux。Termux 在谷歌应用商店里已经停止更新,我使用的是 F-Droid 上的最新版,大概 80MB。不过使用旧的版本也是可以的,使用体验并没有很大差别,旧的版本可以在酷安上搜索找到,体积很小,不过我建议使用 F-Droid 的版本。
进入软件后,我们就看到了命令行的界面,如果出现错误可能是国内的网络问题。
在这里可以通过输入命令来进行操作。为了保证之后的定时执行顺利,在通知栏找到
获取 wake lock,点击允许,同时打开手机后台锁定应用,并在手机的设置里将 Termux 加入各种电池优化的白名单,具体设置方法不同品牌略有差异。这些都是为了尽量保证 Termux 可以常驻后台,但会增加耗电。不过具体的耗电程度和保持后台运行的可靠性均没有经过测试。
搭建开发环境
接下来进入正式的环境搭建环节。我在测试时进行的操作都是通过 ssh 在电脑上完成的,但考虑到 ssh 除了打字方便以外不是很必要,以下的操作都是在手机上用手机键盘打字就可以完成的。
首先是更换国内镜像源,提高之后的软件安装速度。
在命令行输入:
1 | termux-change-repo |
后回车,出现一个图形界面。点击 ok 按钮,在新的界面选择 Tsinghua University(清华大学),然后点击 ok 按钮。如果没有红色文字或者 Warning 等字样,一般表示换源成功。
之后在命令行分次输入以下内容并回车:
1 | apt-get update |
提示输入 y/n
,输入y
回车。
然后安装 Python 用到的的包,这里不进行换源操作,原因是安装的包体积都很小,国外服务器速度足够:
1 | pip install requests bs4 pyexecjs wheel lxml |
这里的 wheel 不是必须的,可以删掉。如果输出内容出现 Warning 提示升级 pip,不影响后续操作。
运行 Python 脚本
接下来从我的 Gitee 仓库下载文件,运行:
1 | git clone https://gitee.com/stassenger/njuhealth-report |
下载文件,使用:
1 | ls |
查看当前目录,可以看到一个名为 njuhealth-report 的文件夹,说明下载成功。
使用:
1 | cd njuhealth-report/ |
进入文件夹,使用 ls
可以看到三个文件。
使用:
1 | nano daka.py |
打开文件进行编辑。注意这里的光标不能使用触摸,需要使用键盘自带的箭头进行操作。修改 username
,password
和location
的值,使用 Ctrl+s 保存,使用 Ctrl+x 退出。
运行:
1 | python daka.py |
查看是否出现成功字样。
设置定时执行
首先使用:
1 | touch daka.log |
创建日志文件,用来保存打卡记录。之后执行:
1 | crond |
开启定时任务,然后使用:
1 | crontab -e |
添加定时任务指令
输入:
1 | 30 6 * * * python ~/njuhealth-report/daka.py >> ~/njuhealth-report/daka.log |
使用 Ctrl+s 保存,Ctrl+x 退出。这里表示每天的早晨 6:30 使用 python 执行 daka.py 并把结果保存在 daka.log 中。
到此,手机上的自动打卡配置完成。在查找资料时,发现可以使用 Tasker 配合 Termux 的插件来完成定时任务,但在我这里插件无法正常运行。Termux 是个十分强大的安卓 Linux 终端模拟器,甚至可以安装完整的 Linux 发行版,具体可以参考 @国光 的博客或者网上搜索更多资料。
部分参考
安卓 termux 折腾手记:安装 python 库 +tasker 调用