MENU

使用openwrt + cron + adb + shell每天凌晨自动钉钉健康上报

March 21, 2020 • Read: 45 • 默认分类阅读设置

事实证明, 懒是第一生产力

因为疫情影响, 我们学校每天都需要使用钉钉进行填写健康报表并截图发送到微信群内
原本这个事情是上午十点半之前完成即可, 但是事情越压越早
直到昨天, 我彻底无法忍受了
微信
昨天是周五, 难道我周六周日要七点二十起来打个卡不成???
如果不早起就要晚睡, 对我来说都是无法接受的

所以我想了想, 想起了adb工具
adb工具下载地址:链接: https://pan.baidu.com/s/1aUyRlbWkvgea3hGGJrgzGQ 提取码: 6n7m

整个实现方法比较简单粗暴, 就是用tap swipe等命令模拟操作, 实现设置好坐标值就好了
使用到的ADB命令大概有

adb shell input tap x y  //x和y代表着模拟点击的xy坐标
adb shell input swipe x y x y //第一个x和y是滑动的初始坐标, 第二个xy是滑动的结束坐标
sleep xs //x代表等待秒数
adb shell screencap -p /sdcard/screen.png  //使用ADB获取屏幕截图, 后面是保存在sdcard中的screen.png文件
adb shell rm /sdcard/screen.png //发送截图后删除图片
adb shell keyevent 26 //开启屏幕也可以关闭屏幕

大概就是这些, 至于如何获取屏幕坐标
去手机设置里, 打开关于手机, 连续点击几次版本号, 开启开发者模式
如何到开发者选项里, 开启显示坐标就可以了
哦对, 一定要运行USB调试

sleep命令是shell里的, 意思是等待几秒后继续运行下面的命令, 因为要等待页面加载的, 酌情设置

至于连接手机, 使用USB极其不方便, 主要是因为我有可能会把手机带到床上去
所以直接使用ADB局域网调试就可以了, 命令如下:

adb tcpip 5555 //这条命令要在手机连接电脑的时候运行
adb connect 192.xxx.xx.xx //后面的是手机的IP

刚开始考虑了用笔记本设置定时任务, 但是合盖不休眠热量无法散发对屏幕不好
我就对路由器起了歪心思, newifi的路由器, 我刷成了openwrt
我记得openwrt有SSH, 就用putty连接了一下, 果真可以
然后是openwrt命令行的操作:
先是为openwrt安装adb服务, 因为openwrt不支持apt啥的一键安装, 所以要自己找ipk包安装:

opkg print-architecture | awk '{print $2}' | grep -v all | grep -v noarch //查看openwrt架构

然后去https://openwrt.org/packages/pkgdata/adb里面的Architectures找对应你的架构
招到一样的点进去, 比如我的是mipsel_24kc, 点进去找Download Packages
选HTTP, 再进去点packages, 按Ctrl+F搜索adb, 找类似于adb_android之类的东西
然后我的下载链接是:
https://downloads.openwrt.org/releases/packages-18.06/mipsel_24kc/base/adb_android.5.0.2_r1-1_mipsel_24kc.ipk
下载之后wget到路由器里面, 使用

opkg install adb.ipk

进行安装, 安装完成后输入adb查看是否安装成功, 安装不成功的话我也没办法了, 别问, 问就是不会

然后就是创建脚本

touch run.sh //创建脚本
vi run.sh //编写脚本, 进去之后按i开启编辑模式, 保存退出的时候按一下esc, 输入:x回车就行了
mv run.sh /usr/share //把脚本移到usr/share目录里面, 方便cron设置

这个是创建脚本, 编写好脚本之后就是设置cron自动执行
crontabs -e //编写cron任务
在这个文件的最后一行添加任务, 格式如下
f1 f2 f3 f4 f5 program
分 时 日 月 周 执行的命令

其中f1 表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行程式的路径。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

举个栗子

0 0 * * * /usr/share/run.sh

就是每天零点零分执行usr/share目录下的run.sh脚本
我这里就是这么写的, 然后:x退出就行了

然后就是

cd /etc/init.d
touch mycron
vi mycron

然后mycron里面写

#!/bin/sh /etc/rc.common

START=60
start(){
        /usr/sbin/crond -c /etc/crontabs
}

最后设置cron开机启动, 以免路由器重启使cron任务失效

/etc/init.d/mycron enable

然后就可以愉快地全自动偷懒了
效果就是每天零点零分, 手机自动解锁, 填表, 截图, 发送截图, 删图片, 关屏幕

Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

3 Comments
  1. 恋爱循环 恋爱循环

    我从夏天去年开始,就准备想研究研究adb命令来着,比如用adb命令来破解网络机顶盒 之类的。但是那些常用指令记不住(没记在心里的就会忘掉),因为这个原因没去研究。
    现在我自己会的技术越来越少(一直都会的技术只有:监控安装)。就

  2. @(滑稽)太强了。

    1. @c0sMx我只是个普普通通的渣渣, 不知道为什么, 每次想偷懒都有如神助