发布于 

如何在手机上设置南大 APP 自动打卡(一)

Github 上 @cubiccm的打卡程序只实现了打卡的部分,登录部分还需要手动操作,并不能实现真正的自动化。所以我用 Python 实现了登陆部分,同时简化了一下 cubiccm 的代码,得到了一个完整的打卡程序。

电脑上运行

Python 程序文件可以从 我的 Gitee 仓库 获取。

daka.py 文件下载到本地后,把文件中的 usernamepasswordlocation 改成自己的信息,使用:

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
2
apt-get update
apt-get install nano python git cronie libxml2 libxslt nodejs

提示输入 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

打开文件进行编辑。注意这里的光标不能使用触摸,需要使用键盘自带的箭头进行操作。修改 usernamepasswordlocation的值,使用 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 发行版,具体可以参考 @国光 的博客或者网上搜索更多资料。

部分参考

win10 定时任务自动运行 python 程序

国光:Termux 高级终端安装使用配置教程

Termux 镜像使用帮助

linux 下安装 lxml 包

Termux 定时运行 python 脚本

Python 爬虫杂记 - python 运行 js

安卓 termux 折腾手记:安装 python 库 +tasker 调用

旧手机废物利用(4)-Termux:Tasker 定时调用任务

使用 ssh 链接 Termux