本篇目的在于折騰肤频。
用戶痛點
因為公司上下班需要打卡植袍,而可能出現(xiàn)忘記打卡的情況媳否。針對此情況榔昔,公司有了人性化的考慮煞茫,每月免費提供2次補卡機會氓辣。但是對于貪婪的程序員洼滚,這是遠遠不夠的瞒渠。所以我們想通過技術(shù)改變些什么
需求分析
打卡需要通過公司自己的客戶端輸入手機號獲取驗證碼登陸歪脏,然后定位在公司附近N公里疑俭,點擊上班打卡或者下班打卡。
要素
- 手機號登陸
- 位置
- 時間
- 點擊操作
方案設(shè)計
- 接口調(diào)用方式
通過抓包獲取打卡接口請求婿失,然后調(diào)用接口請求完成打卡 - 篡改位置信息方式
手機上安裝可修改定位信息的軟件钞艇,修改地址啄寡,突破地域限制
可行性調(diào)研
通過Fiddler 抓包分析發(fā)現(xiàn)請求中有簽名
簽名通過客戶端里的算法規(guī)則生成。
拿不到規(guī)則就拿不到簽名哩照,就無法直接調(diào)用請求挺物。
獲取規(guī)則這可能涉及到客戶端的反編譯了,暫時未接觸過飘弧。
調(diào)接口的方式走不通识藤,嘗試篡改位置信息
網(wǎng)上可以找到虛擬定位軟件,但是多數(shù)都收費次伶。
雖然能滿足當前需求痴昧,但是總感覺被收費不舒服,而且整個過程還是有很多機械化的操作冠王。
重新給需求加戲
我希望把整個過程自動化解放雙手赶撰,比如發(fā)一條“打卡”的消息,就能把事情做了
既然提高了效率柱彻,就應(yīng)該提供更大的輸出豪娜,最好能夠幫對那些忘記打卡的同事伸出援手。
那不如開個公眾號吧绒疗,誰需要了侵歇,發(fā)送手機號碼,和驗證碼吓蘑,就可以幫你完成惕虑。
既然提供服務(wù)了,就不能用自己的手機了磨镶。需要一臺長期不關(guān)機的電腦做服務(wù)器
在“服務(wù)器”里用虛擬機來完成溃蔫。這樣一來,自己的手機也不必安裝各種所需的工具軟件
摸索過程
模擬器先用了藍疊琳猫,后來發(fā)現(xiàn)有些軟件在上面提示裝不了
又換了mumu模擬器伟叛,所需的軟件都能安裝而且開啟速度也更快了。
自動化實現(xiàn)上脐嫂,先用了按鍵精靈统刮,但是因為按鍵精靈的腳本的觸發(fā)條件感覺不能做到對事件監(jiān)控觸發(fā)。
后來改用Tasker账千。
具體實現(xiàn)
- 在模擬器中安裝Tasker及其插件
- 在模擬器中安裝 QQ 作為接收消息的服務(wù)號
- 打開Tasker侥蒙,完成相應(yīng)的授權(quán)
Tasker首頁點擊右下角的 +
在彈出的列表中依次選擇 事件——插件——NotificationListener——NotificationListener
操作后看到如圖
點擊右側(cè)鉛筆進入如下界面,并按照圖示設(shè)置
Apps :是你要監(jiān)聽的應(yīng)用匀奏,這里我選擇手機QQ
Title :是你的QQ收到消息的標題鞭衩,如下圖中的,我用的是Test(也就是我要發(fā)消息給過來的QQ,在這個QQ上的備注名稱是Test)
Text :是發(fā)過來的文本论衍,如圖瑞佩,我填寫的是“打卡”
配置好后,自動彈出新建任務(wù)坯台,輸入任務(wù)名稱后
依次選擇 【程序】——【啟動應(yīng)用】——【選擇你要打卡的應(yīng)用】——返回(找不到確認按鈕炬丸,就返回到上層確認)
設(shè)置后如圖,可以點擊左下角的運行按鈕測試能否成功啟動設(shè)置的應(yīng)用
如果成功啟動捂人,再嘗試能否在接受到消息時觸發(fā)
這里我們可以理解到
這個軟件本質(zhì)上通過【配置】+【任務(wù)】組合的方式為我們提供了一個【在什么場景觸發(fā)】【做什么任務(wù)】的自動化支持
我們現(xiàn)在已經(jīng)做了御雕,當收到QQ推送的由Test發(fā)出的內(nèi)容為“打卡”的消息時,則啟動需要簽到的應(yīng)用滥搭,過程中你可能需要解決如下問題
- 【授權(quán)】為確保QQ消息發(fā)過來會在通知欄顯示酸纲,你可能需要給應(yīng)用授權(quán)
- 【殺進程】QQ如果沒有啟動,是不會通知的瑟匆,如果在前臺開著也不會通知闽坡。我的做法是,先打卡QQ愁溜,然后在任務(wù)欄把他×掉
請確保以上測試通過疾嗅,再進行下一步
現(xiàn)在我們需要解決怎么打卡的問題
考慮到登陸后一直使用,我們的登陸態(tài)不會過期冕象,所以暫時我們的自動化腳本暫時不必包含登陸
而打卡通常就是點一下按鈕就完事了代承。那么我們來完成它
在【任務(wù)】Tab頁,打開我們的任務(wù)渐扮,點擊右下角的“+”论悴,
依次選擇【代碼】——【運行外殼】
輸入 命令 【input tap 33 44】 并勾選【使用Root】
這個命令意思是在屏幕上坐標為 33,44點一下
這個坐標如何獲取呢墓律?
打開模擬器【設(shè)置】膀估,搜索【指針】,選擇【指針位置】開啟【開發(fā)者】和【指針位置】
開啟后耻讽,會多出如圖一欄察纯,你在屏幕上的點擊,將會顯示坐標针肥,其中X饼记,Y就是我們需要的坐標
獲取你需要點擊打卡按鈕的坐標,修改剛填寫的33 44
現(xiàn)在你已經(jīng)會點擊APP里的任意地方了慰枕,我們再來理一理關(guān)于打卡握恳,我們需要做的事情
- 打開應(yīng)用
- 延時(為了避免應(yīng)用打開了,但是頁面沒加載好啥的捺僻,或者你可能還需要點擊下【獲取定位】)
- 點擊【打卡】
- 延時(為了等打卡結(jié)果出來)
- 截圖(為了確保是打卡成功了,后面可以發(fā)到你的QQ上來確認)
- 延時(為了等截圖完成)
- 打開QQ(為了把截圖發(fā)回去)
- 點擊要回復的QQ(可以在QQ里置頂聊天,確保位置不變)
- 點擊【選擇圖片按鈕】
- 延時
- 點擊【選擇圖片】因為用模擬器匕坯,可以確保沒有其他圖片束昵,而我們截圖的圖片每次是覆蓋,所以位置固定葛峻,可以點擊固定位置來選擇這個圖片
-
延時
- 點擊【發(fā)送】按鈕
- 延時
- 點擊【返回】按鈕
- 延時
- 點擊【左上角自己的頭像】(為了彈出菜單頁面)
- 延時
- 點擊【設(shè)置】按鈕
- 點擊【賬號管理】選項
- 延時
- 點擊【退出QQ】選項
- 延時
- 點擊【確認】按鈕(退出QQ锹雏,如果不退出QQ,則再次發(fā)消息术奖,因為QQ在前臺礁遵,消息會直接到QQ里,不會進通知欄)
以上我們總得來說也就用了幾個簡單的命令
【點擊指定位置】 input tap x y
【截圖】screencap -p /sdcard/ImgCheck/screen.png
【延時】sleep 秒數(shù)
嘗試下采记,用QQ佣耐,給模擬器登陸的QQ發(fā)送“打卡”指令,測試下是否可行吧
本文純屬娛樂唧龄,采用本博文章提供的解決方案兼砖,風險讀者自擔。
所造成的損失既棺,如程序讽挟,文件,數(shù)據(jù)造成損失和混壞丸冕,博主不承擔責任耽梅。
轉(zhuǎn)載本博文章須在文章明顯處注明原文的鏈接和作者信息。便于讀者找到原文的更新版胖烛。