Tasker远程自动化打卡

本篇目的在于折腾。

用户痛点

因为公司上下班需要打卡,而可能出现忘记打卡的情况。针对此情况,公司有了人性化的考虑,每月免费提供2次补卡机会。但是对于贪婪的程序员,这是远远不够的。所以我们想通过技术改变些什么

需求分析

打卡需要通过公司自己的客户端输入手机号获取验证码登陆,然后定位在公司附近N公里,点击上班打卡或者下班打卡。

要素

  • 手机号登陆
  • 位置
  • 时间
  • 点击操作

方案设计

  • 接口调用方式
    通过抓包获取打卡接口请求,然后调用接口请求完成打卡
  • 篡改位置信息方式
    手机上安装可修改定位信息的软件,修改地址,突破地域限制

可行性调研

通过Fiddler 抓包分析发现请求中有签名
签名通过客户端里的算法规则生成。
拿不到规则就拿不到签名,就无法直接调用请求。
获取规则这可能涉及到客户端的反编译了,暂时未接触过。
调接口的方式走不通,尝试篡改位置信息
网上可以找到虚拟定位软件,但是多数都收费。
虽然能满足当前需求,但是总感觉被收费不舒服,而且整个过程还是有很多机械化的操作。

重新给需求加戏

我希望把整个过程自动化解放双手,比如发一条“打卡”的消息,就能把事情做了
既然提高了效率,就应该提供更大的输出,最好能够帮对那些忘记打卡的同事伸出援手。
那不如开个公众号吧,谁需要了,发送手机号码,和验证码,就可以帮你完成。
既然提供服务了,就不能用自己的手机了。需要一台长期不关机的电脑做服务器
在“服务器”里用虚拟机来完成。这样一来,自己的手机也不必安装各种所需的工具软件

摸索过程

模拟器先用了蓝叠,后来发现有些软件在上面提示装不了
又换了mumu模拟器,所需的软件都能安装而且开启速度也更快了。
自动化实现上,先用了按键精灵,但是因为按键精灵的脚本的触发条件感觉不能做到对事件监控触发。
后来改用Tasker。

具体实现

Tasker及其插件下载地址
mumu模拟器下载地址

  • 在模拟器中安装Tasker及其插件
  • 在模拟器中安装 QQ 作为接收消息的服务号
  • 打开Tasker,完成相应的授权

Tasker首页点击右下角的 +
在弹出的列表中依次选择 事件——插件——NotificationListener——NotificationListener
操作后看到如图

Tasker远程自动化打卡_第1张图片
image.png

点击右侧铅笔进入如下界面,并按照图示设置
Apps :是你要监听的应用,这里我选择手机QQ
Title :是你的QQ收到消息的标题,如下图中的,我用的是Test(也就是我要发消息给过来的QQ,在这个QQ上的备注名称是Test)
Text :是发过来的文本,如图,我填写的是“打卡”

Tasker远程自动化打卡_第2张图片
通知栏接受到的通知消息
Tasker远程自动化打卡_第3张图片
设置通知栏监听配置
Tasker远程自动化打卡_第4张图片
image.png
Tasker远程自动化打卡_第5张图片
image.png

配置好后,自动弹出新建任务,输入任务名称后
依次选择 【程序】——【启动应用】——【选择你要打卡的应用】——返回(找不到确认按钮,就返回到上层确认)
设置后如图,可以点击左下角的运行按钮测试能否成功启动设置的应用

Tasker远程自动化打卡_第6张图片
image.png

如果成功启动,再尝试能否在接受到消息时触发
这里我们可以理解到
这个软件本质上通过【配置】+【任务】组合的方式为我们提供了一个【在什么场景触发】【做什么任务】的自动化支持
我们现在已经做了,当收到QQ推送的由Test发出的内容为“打卡”的消息时,则启动需要签到的应用,过程中你可能需要解决如下问题

  • 【授权】为确保QQ消息发过来会在通知栏显示,你可能需要给应用授权
  • 【杀进程】QQ如果没有启动,是不会通知的,如果在前台开着也不会通知。我的做法是,先打卡QQ,然后在任务栏把他×掉

请确保以上测试通过,再进行下一步

现在我们需要解决怎么打卡的问题
考虑到登陆后一直使用,我们的登陆态不会过期,所以暂时我们的自动化脚本暂时不必包含登陆
而打卡通常就是点一下按钮就完事了。那么我们来完成它
在【任务】Tab页,打开我们的任务,点击右下角的“+”,
依次选择【代码】——【运行外壳】
输入 命令 【input tap 33 44】 并勾选【使用Root】
这个命令意思是在屏幕上坐标为 33,44点一下

Tasker远程自动化打卡_第7张图片
image.png

这个坐标如何获取呢?
打开模拟器【设置】,搜索【指针】,选择【指针位置】开启【开发者】和【指针位置】

Tasker远程自动化打卡_第8张图片
image.png

开启后,会多出如图一栏,你在屏幕上的点击,将会显示坐标,其中X,Y就是我们需要的坐标
Tasker远程自动化打卡_第9张图片
image.png

获取你需要点击打卡按钮的坐标,修改刚填写的33 44

现在你已经会点击APP里的任意地方了,我们再来理一理关于打卡,我们需要做的事情

  • 打开应用
  • 延时(为了避免应用打开了,但是页面没加载好啥的,或者你可能还需要点击下【获取定位】)
  • 点击【打卡】
  • 延时(为了等打卡结果出来)
  • 截图(为了确保是打卡成功了,后面可以发到你的QQ上来确认)
  • 延时(为了等截图完成)
  • 打开QQ(为了把截图发回去)
    • 点击要回复的QQ(可以在QQ里置顶聊天,确保位置不变)
    • 点击【选择图片按钮】
    • 延时
    • 点击【选择图片】因为用模拟器,可以确保没有其他图片,而我们截图的图片每次是覆盖,所以位置固定,可以点击固定位置来选择这个图片
    • 延时


      image.png

      Tasker远程自动化打卡_第10张图片
      image.png
    • 点击【发送】按钮
    • 延时
    • 点击【返回】按钮
    • 延时
    • 点击【左上角自己的头像】(为了弹出菜单页面)
    • 延时
    • 点击【设置】按钮
    • 点击【账号管理】选项
    • 延时
    • 点击【退出QQ】选项
    • 延时
    • 点击【确认】按钮(退出QQ,如果不退出QQ,则再次发消息,因为QQ在前台,消息会直接到QQ里,不会进通知栏)

以上我们总得来说也就用了几个简单的命令
【点击指定位置】 input tap x y
【截图】screencap -p /sdcard/ImgCheck/screen.png
【延时】sleep 秒数

尝试下,用QQ,给模拟器登陆的QQ发送“打卡”指令,测试下是否可行吧

本文纯属娱乐,采用本博文章提供的解决方案,风险读者自担。
所造成的损失,如程序,文件,数据造成损失和混坏,博主不承担责任。
转载本博文章须在文章明显处注明原文的链接和作者信息。便于读者找到原文的更新版。

你可能感兴趣的:(Tasker远程自动化打卡)