99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀推薦一款好用且能兼職賺錢的自動(dòng)化工具 - Hamibot
推薦一款好用且能兼職賺錢的自動(dòng)化工具 - Hamibot
2022-02-15
收藏
推薦一款好用且能兼職賺錢的自動(dòng)化工具 - Hamibot

作者:星安果

來(lái)源:AirPython

1. 前言

大家好,我是安果!

最近發(fā)現(xiàn)一款神器「 Hamibot 」,它是一款 Android 端的自動(dòng)化工具,它基于 AutoJS 源碼進(jìn)行的二次開(kāi)發(fā)

官方網(wǎng)站:https://docs.hamibot.com/

Hamibot 腳本市場(chǎng)提供了很多腳本,我們都可以免費(fèi)導(dǎo)入進(jìn)行試用

首先,我們?cè)?PC Web 的控制臺(tái)添加一個(gè)機(jī)器人,然后使用手機(jī)通過(guò)「 配對(duì)碼 」進(jìn)行配對(duì),接著從腳本市場(chǎng)選擇一個(gè)功能腳本導(dǎo)入,最后在控制臺(tái)運(yùn)行腳本就可以在手機(jī)上運(yùn)行一系列自動(dòng)化操作了

推薦一款好用且能兼職賺錢的自動(dòng)化工具 - Hamibot

當(dāng)然,我們也可以根據(jù)官方文檔編寫一些實(shí)用的腳本上傳到平臺(tái)上,獲取一些傭金提成

由于 Hamibot 基于 AutoJS,語(yǔ)法都大同小異,所以本篇文章將只介紹 Hamibot 一些實(shí)用的使用技能

2. 實(shí)用技能

2-1 App ?;钤诰€

自動(dòng)化腳本運(yùn)行實(shí)際上是 App 接受到 Web 端 Hamibot 控制臺(tái)發(fā)送的指令,進(jìn)而驅(qū)動(dòng)手機(jī)進(jìn)行的一系列動(dòng)作,所以保證 Hamibot App 在后臺(tái)一直運(yùn)行變得非常重要

程序?;钪饕?6 個(gè)方面,分別是:

  • 前臺(tái)服務(wù)打開(kāi) Hamibot App,從側(cè)邊欄中開(kāi)啟「 前臺(tái)服務(wù) 」功能
  • 懸浮窗打開(kāi) Hamibot App,從側(cè)邊欄中開(kāi)啟「 懸浮窗 」功能
  • 應(yīng)用自啟動(dòng)手機(jī)進(jìn)入到設(shè)置中,搜索關(guān)鍵字「 應(yīng)用管理 」,選擇 Hamibot 應(yīng)用,開(kāi)啟「 自啟動(dòng) 」功能
  • 不鎖定屏幕首先手動(dòng)開(kāi)啟開(kāi)發(fā)者選項(xiàng)( 不同廠商系統(tǒng)手機(jī)的開(kāi)啟方式不一致,一般是在系統(tǒng)版本連續(xù)點(diǎn)擊多次就可以開(kāi)啟開(kāi)發(fā)者選項(xiàng) ),然后在開(kāi)發(fā)者選項(xiàng)中開(kāi)啟「 不鎖定屏幕 」功能,這樣在手機(jī)充電時(shí),屏幕不會(huì)休眠
  • 關(guān)閉省電策略在手機(jī)應(yīng)用設(shè)置中,選擇省電策略為「 不限制 」,這樣 App 會(huì)在后臺(tái)一直運(yùn)行
  • 保證手機(jī)一直聯(lián)網(wǎng)只有手機(jī)一直聯(lián)網(wǎng),Hamibot 控制臺(tái)才能將指令傳輸給設(shè)備進(jìn)行運(yùn)行

2-2 啟動(dòng)應(yīng)用

Hamibot 中的 app 模塊提供了很多函數(shù)用于操作 App 應(yīng)用

其中,啟動(dòng)一個(gè)應(yīng)用有 3 種方式

# 啟動(dòng)應(yīng)用的3種方式
# 方式一:通過(guò)應(yīng)用的名稱
# 比如:某寶、某多、某條
app.launchApp('某寶');
# 方式二:通過(guò)應(yīng)用的包名
# 包名通過(guò)adb命令或者Android Studio 去解析 APK 獲取
# 比如:?jiǎn)?dòng) Hamibot 應(yīng)用
app.launch('com.hamibot.hamibot');
# 方式三:與第二種類似,全局函數(shù)
# 通過(guò)應(yīng)用包名啟動(dòng)應(yīng)用
launchPackage('com.hamibot.hamibot');

2-3 觸摸操作

觸摸操作是基于屏幕坐標(biāo)進(jìn)行點(diǎn)擊、長(zhǎng)按、滑動(dòng)等操作,但是該操作需要 Android 7.0 以上或 Root 權(quán)限才能有效

PS:對(duì)于一些基于元素的點(diǎn)擊操作失效的場(chǎng)景,換成觸摸操作反而能很好的解決問(wèn)題

// 使用觸摸操作點(diǎn)擊某個(gè)元素
// 獲取某個(gè)元素
var widget = id('xxx').findOne();
// 獲取其中心位置,執(zhí)行點(diǎn)擊操作
click(widget.bounds().centerX(), widget.bounds().centerY());

2-4 控件操作

控件操作為編寫腳本的核心內(nèi)容,AutoJS 和 Hamibot 官方文檔都非常的詳細(xì)地列出了 UiSelector、UiObject、UiCollection 的使用方法

官方文檔:

https://docs.hamibot.com/reference/widgetsBasedAutomation/

2-5 網(wǎng)絡(luò)請(qǐng)求

結(jié)合網(wǎng)絡(luò)請(qǐng)求,能將爬蟲(chóng)與自動(dòng)化完美地結(jié)合在一起

這里以常見(jiàn)的 GET、POST 請(qǐng)求為例

// 1-GET請(qǐng)求
// 網(wǎng)絡(luò)請(qǐng)求,獲取響應(yīng)值
var r = http.get('www.baidu.com');
// 響應(yīng)碼
log('code = ' + r.statusCode);
// 響應(yīng)體(字符串)
log('html = ' + r.body.string());
// 2-POST 請(qǐng)求
var url = 'http://www.**.com/api/login';
//直接傳入一個(gè)字典作為參數(shù)
r = http.postJson(url, {
username: 'xag',
password: '123456'
});
//獲取請(qǐng)求的響應(yīng)并彈出吐司
toastLog(r.body.string());

官網(wǎng)提供了網(wǎng)絡(luò)請(qǐng)求的基礎(chǔ)函數(shù),大家可以自行去擴(kuò)展使用

2-6 線程

腳本默認(rèn)是在主線程中運(yùn)行的,我們可以將一些耗時(shí)的操作添加到線程中執(zhí)行

auto.waitFor();
//開(kāi)啟一個(gè)子線程
threads.start(function() {
//在新線程執(zhí)行的代碼
while (true) {
log('子線程');
}
});
//主線程
while (true) {
log('腳本主線程');
}

3. 拓展一下

在實(shí)際使用 Hamibot 的過(guò)程中,發(fā)現(xiàn)其提供的定時(shí)任務(wù)沒(méi)有 AutoJS 使用起來(lái)方便

比如,如果我想固定在每一天的某個(gè)時(shí)間執(zhí)行某個(gè)腳本,可惜的是,官方提供的任務(wù)功能沒(méi)有實(shí)現(xiàn)

推薦一款好用且能兼職賺錢的自動(dòng)化工具 - Hamibot

這時(shí)候,我們就需要我們?cè)诖a中自己去實(shí)現(xiàn)這個(gè)功能點(diǎn)了

function setScheduledTask(hour, minute, callTask) {
let taskTime = new Date();
taskTime.setHours(hour);
taskTime.setMinutes(minute);
let timeDiff = taskTime.getTime() - (new Date()).getTime(); // 獲取時(shí)間差
timeDiff = timeDiff > 0 ? timeDiff : (timeDiff + 24 * 60 * 60 * 1000);
setTimeout(function() {
callTask();
setInterval(callTask, 24 * 60 * 60 * 1000); // 24小時(shí)為循環(huán)周期
}, timeDiff);
}
//獲取配置文件中設(shè)置的時(shí)間(小時(shí)、分鐘)
const { hour,minute } = hamibot.env;
toastLog(hour);
toastLog(minute)
function
create_thread_and_do_something
(){
//定義子線程
var my_thread = threads.start(function(){
console.log("開(kāi)始執(zhí)行子線程。 。。。")
...
console.log("結(jié)束執(zhí)行子線程。。。。")
})
}
// 每天某個(gè)時(shí)間開(kāi)啟一個(gè)子線程,執(zhí)行一個(gè)任務(wù)
setScheduledTask(hour, minute,
create_thread_and_do_something);

4. 最后

上面內(nèi)容列出了使用 Hamibot 編寫自動(dòng)化腳本需要掌握的一些功能點(diǎn)

Hamibot 和 AutoJS 的腳本語(yǔ)法基本類似,但是 Hamibot 在易用性、穩(wěn)定性、群控方面更有優(yōu)勢(shì)一點(diǎn),更多復(fù)雜的功能大家可以自行去查閱官方文檔去拓展

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }