1. 前言
大家好,我是安果!
最近發現一款神器「 Hamibot 」,它是一款 Android 端的自動化工具,它基於 AutoJS 源碼進行的二次開發
官方網站:https://docs.hamibot.com/
Hamibot 腳本市場提供了很多腳本,我們都可以免費導入進行試用
首先,我們在 PC Web 的控制台添加一個機器人,然后使用手機通過「 配對碼 」進行配對,接着從腳本市場選擇一個功能腳本導入,最后在控制台運行腳本就可以在手機上運行一系列自動化操作了
當然,我們也可以根據官方文檔編寫一些實用的腳本上傳到平台上,獲取一些佣金提成
由於 Hamibot 基於 AutoJS,語法都大同小異,所以本篇文章將只介紹 Hamibot 一些實用的使用技能
2. 實用技能
2-1 App 保活在線
自動化腳本運行實際上是 App 接受到 Web 端 Hamibot 控制台發送的指令,進而驅動手機進行的一系列動作,所以保證 Hamibot App 在后台一直運行變得非常重要
程序保活主要包含 6 個方面,分別是:
-
前台服務
打開 Hamibot App,從側邊欄中開啟「 前台服務 」功能
-
懸浮窗
打開 Hamibot App,從側邊欄中開啟「 懸浮窗 」功能
-
應用自啟動
手機進入到設置中,搜索關鍵字「 應用管理 」,選擇 Hamibot 應用,開啟「 自啟動 」功能
-
不鎖定屏幕
首先手動開啟開發者選項( 不同廠商系統手機的開啟方式不一致,一般是在系統版本連續點擊多次就可以開啟開發者選項 ),然后在開發者選項中開啟「 不鎖定屏幕 」功能,這樣在手機充電時,屏幕不會休眠
-
關閉省電策略
在手機應用設置中,選擇省電策略為「 不限制 」,這樣 App 會在后台一直運行
-
保證手機一直聯網
只有手機一直聯網,Hamibot 控制台才能將指令傳輸給設備進行運行
2-2 啟動應用
Hamibot 中的 app 模塊提供了很多函數用於操作 App 應用
其中,啟動一個應用有 3 種方式
# 啟動應用的3種方式
# 方式一:通過應用的名稱
# 比如:某寶、某多、某條
app.launchApp('某寶');
# 方式二:通過應用的包名
# 包名通過adb命令或者Android Studio 去解析 APK 獲取
# 比如:啟動 Hamibot 應用
app.launch('com.hamibot.hamibot');
# 方式三:與第二種類似,全局函數
# 通過應用包名啟動應用
launchPackage('com.hamibot.hamibot');
2-3 觸摸操作
觸摸操作是基於屏幕坐標進行點擊、長按、滑動等操作,但是該操作需要 Android 7.0 以上或 Root 權限才能有效
PS:對於一些基於元素的點擊操作失效的場景,換成觸摸操作反而能很好的解決問題
// 使用觸摸操作點擊某個元素
// 獲取某個元素
var widget = id('xxx').findOne();
// 獲取其中心位置,執行點擊操作
click(widget.bounds().centerX(), widget.bounds().centerY());
2-4 控件操作
控件操作為編寫腳本的核心內容,AutoJS 和 Hamibot 官方文檔都非常的詳細地列出了 UiSelector、UiObject、UiCollection 的使用方法
官方文檔:
https://docs.hamibot.com/reference/widgetsBasedAutomation/
2-5 網絡請求
結合網絡請求,能將爬蟲與自動化完美地結合在一起
這里以常見的 GET、POST 請求為例
// 1-GET請求
// 網絡請求,獲取響應值
var r = http.get('www.baidu.com');
// 響應碼
log('code = ' + r.statusCode);
// 響應體(字符串)
log('html = ' + r.body.string());
// 2-POST 請求
var url = 'http://www.**.com/api/login';
//直接傳入一個字典作為參數
r = http.postJson(url, {
username: 'xag',
password: '123456'
});
//獲取請求的響應並彈出吐司
toastLog(r.body.string());
官網提供了網絡請求的基礎函數,大家可以自行去擴展使用
2-6 線程
腳本默認是在主線程中運行的,我們可以將一些耗時的操作添加到線程中執行
auto.waitFor();
//開啟一個子線程
threads.start(function() {
//在新線程執行的代碼
while (true) {
log('子線程');
}
});
//主線程
while (true) {
log('腳本主線程');
}
3. 拓展一下
在實際使用 Hamibot 的過程中,發現其提供的定時任務沒有 AutoJS 使用起來方便
比如,如果我想固定在每一天的某個時間執行某個腳本,可惜的是,官方提供的任務功能沒有實現
這時候,我們就需要我們在代碼中自己去實現這個功能點了
function setScheduledTask(hour, minute, callTask) {
let taskTime = new Date();
taskTime.setHours(hour);
taskTime.setMinutes(minute);
let timeDiff = taskTime.getTime() - (new Date()).getTime(); // 獲取時間差
timeDiff = timeDiff > 0 ? timeDiff : (timeDiff + 24 * 60 * 60 * 1000);
setTimeout(function() {
callTask();
setInterval(callTask, 24 * 60 * 60 * 1000); // 24小時為循環周期
}, timeDiff);
}
//獲取配置文件中設置的時間(小時、分鍾)
const { hour,minute } = hamibot.env;
toastLog(hour);
toastLog(minute)
function create_thread_and_do_something(){
//定義子線程
var my_thread = threads.start(function(){
console.log("開始執行子線程。 。。。")
...
console.log("結束執行子線程。。。。")
})
}
// 每天某個時間開啟一個子線程,執行一個任務
setScheduledTask(hour, minute, create_thread_and_do_something);
4. 最后
上面內容列出了使用 Hamibot 編寫自動化腳本需要掌握的一些功能點
Hamibot 和 AutoJS 的腳本語法基本類似,但是 Hamibot 在易用性、穩定性、群控方面更有優勢一點,更多復雜的功能大家可以自行去查閱官方文檔去拓展
如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續輸出更多優質文章的最強動力!
推薦閱讀