這幾天,雙十一的活動有沒有把你折騰的不輕呢?若是沒有,只有兩種可能:一,你沒女友;二,你沒有女性朋友。git
要知道阿里每一年都會發放大量紅包、各類優惠券和各類互助遊戲......而這兩天,馬爸爸的「ATM」們可都沉迷於這些個互助遊戲裏不可自拔,吾日三省吾身:簽到了?作任務了麼?升級了麼?:程序員
通常咱們程序員對這種遊戲都是沒什麼太大興趣,畢竟天天都有找不完的Bug,加不完的班,可是假如在這時候你的女神向你求幫助的時候,就你那個等級你拿的出手麼?github
因此,程序員怎麼能錯過這麼一個在女神面前展示專業能力的時候呢,這不,今天猿妹就在GitHub上發現,有程序員寫了一個小腳本,能夠天天自動作任務,領喵幣,這下幫女神蓋樓,不再用擔憂等級低了:app
能夠看出來目前這個小腳本尚未引發程序員的注意,一個星星都還沒得到(GitHub地址:https://github.com/sleepybear...)框架
其實,這個腳本並不難,基於auto.js框架來實現,auto.js是一個支持無障礙服務的Android平臺上的JavaScript IDE,以控件爲基礎,能自動運行一些操做,實現懸浮窗錄製和運行。因此這個腳本只支持安卓系統。oop
詳細的腳本代碼以下:spa
let deviceWidth = device.width; let deviceHeight = device.height; function openBeginningBtnItem(delay) { let items = textStartsWith("gif;base64").depth(19).find(); console.log("尋找--領喵幣"); if (items.length > 0) { let item = items[items.length - 1]; console.log("點擊--領喵幣"); clickItemInCenter(item); sleep(delay); return 1; } return -1; } function isOpenBeginning() { let signIn = textContains("簽到").findOnce(); if (signIn != null) { console.log("成功--打開領取中心"); return 1; } return -1; } function ensureOpenBeginning(waitDelay) { if (isOpenBeginning() === -1) { openBeginningBtnItem(waitDelay); } if (isOpenBeginning() === 1) return 1; console.error("失敗--打開領取中心"); toast("失敗--打開領取中心"); return -1; } function clickItemInCenter(item, time) { if (time == null) time = 50; if (item == null) return; let x = item.bounds().centerX(); let y = item.bounds().centerY(); press(x, y, time); } function goShopping() { let shopping = text("去瀏覽").findOne(1000); if (shopping == null) { toastLog("結束--未知問題"); return -1; } console.log("開始瀏覽..."); clickItemInCenter(shopping); return 1; } function swipeUp() { let x = parseInt(deviceWidth / 2); let duration = 500; let y = [parseInt(deviceHeight * 0.75), parseInt(deviceHeight * 0.25)]; swipe(x, y[0], x, y[1], duration); swipe(x, y[0], x, y[1], duration); } function isFull() { for (let i = 0; i < 10; i++) { if (descContains("已達上限").findOnce() || textContains("已達上限").findOnce()) { console.log("今日已達上限"); return 1; } sleep(1000); } return 0 } function waitSwipe() { let swipeAppear; let shoppingFull; for (let i = 0; i < 3; i++) { swipeAppear = desc("滑動瀏覽得").findOne(1000); if (swipeAppear != null) break; shoppingFull = descContains("已達上限").findOne(1000); if (shoppingFull != null) return 0; console.log("i" + i); } sleep(1000); if (swipeAppear != null) { console.log("開始滑動"); swipeUp(); console.log("等待15s"); sleep(1000 * 16); } else { console.log("slow"); console.log("等待20s"); sleep(1000 * 20); } let shoppingFinish = desc("任務完成").findOne(2000); if (shoppingFinish != null) { console.log("逛完,準備返回"); } else { toastLog("未知逛完,返回"); } return 1; } function browseFinish() { for (let i = 0; i < 10; i++) { let normalFinishDesc = descContains("已得到").findOnce(); let normalFinishText = textContains("已得到").findOnce(); let swipeFinish = desc("任務完成").findOnce(); if (normalFinishDesc != null || swipeFinish != null || normalFinishText != null) { console.log("瀏覽結束"); return 0; } sleep(250); } console.log("瀏覽未知"); return -1; } function judgeWay() { let timeOut = 1000 * 7; let delay = 250; let loops = parseInt(timeOut / delay); for (let i = 0; i < loops; i++) { let swipeAppearDesc = descContains("滑動瀏覽得").findOnce(); let swipeAppearText = textContains("滑動瀏覽得").findOnce(); if (swipeAppearDesc != null || swipeAppearText != null) { console.log("已獲取到滑動瀏覽模式"); return 0; } let directBrowseDesc = desc("瀏覽").findOnce(); let directBrowseText = text("瀏覽").findOnce(); if (directBrowseDesc != null || directBrowseText != null) { if (descContains("00喵幣").findOnce() != null || textContains("00喵幣").findOnce() != null) { console.log("已獲取到正常瀏覽模式"); return 1; } } sleep(delay); } console.log("超時"); return -1; } function reopenAgain() { console.log("reopen"); let tbs = id("taskBottomSheet").findOnce(); if (tbs == null) return -1; let close = tbs.child(1); if (close != null) { console.log("關閉"); clickItemInCenter(close); sleep(1000); return ensureOpenBeginning(1000); } return -1; } function runGoShopping() { let isSuccess; for (let i = 0; i < 20; i++) { isSuccess = ensureOpenBeginning(1000); if (isSuccess !== 1) break; isSuccess = goShopping(); let count = 0; while (isSuccess !== 1) { if (reopenAgain() === 1) { isSuccess = 1; break; } if (count++ >= 2) break; } if (isSuccess === -1) break; let st = waitSwipe(); if (st === 0) { toastLog("已達上限,結束腳本"); return 0; } back(); sleep(1000); } if (isSuccess === 0) { toastLog("正常結束"); return 0; } else if (isSuccess === -1) { toastLog("異常結束"); return 1; } } function clickGoBrowse() { let browse = text("去瀏覽").findOne(1000); if (browse != null) { let guessYouLike = textContains("猜你喜歡").findOnce(); if (guessYouLike != null) { console.log("出現猜你喜歡"); let pp = browse.parent.bounds().top; let ppp = guessYouLike.parent.parent.bounds().top; if (ppp === pp) { console.log("跳過--猜你喜歡"); let allBrowse = text("去瀏覽").find(); for (let i = 0; i < allBrowse.length; i++) { let item = allBrowse[i]; if (item.bounds().top !== browse.bounds().top) { browse = item; } } } } console.log("點擊--去瀏覽"); clickItemInCenter(browse); return 1; } return -1; } function runGoBrowse() { let isSuccess = 1; for (let i = 0; i < 40; i++) { isSuccess = ensureOpenBeginning(1000); if (isSuccess !== 1) break; for (let j = 0; j < 3; j++) { isSuccess = clickGoBrowse(); if (isSuccess !== 1) { reopenAgain(); } else break; } if (isSuccess === -1) break; let jw = judgeWay(); sleep(1000); if (jw === 0) swipeUp(); else if (jw === -1) { if (isFull() === 1) { console.log("已達上限"); back(); sleep(2000); reopenAgain(); continue; } console.log("4s"); sleep(1000 * 4); } console.log("15s"); sleep(1000 * 15); let isF = browseFinish(); if (isF === 0) { console.log("瀏覽結束,返回"); } else if (isF === -1) { console.log("瀏覽未正常結束,返回"); } back(); sleep(2000); } } function removeFile(fileName) { if (files.exists(fileName)) { files.remove(fileName); } } function clearNewScript() { threads.start(function () { removeFile("/sdcard/腳本/淘寶喵幣/script.js"); removeFile("/sdcard/腳本/淘寶喵幣/version.txt"); toastLog("清除完成"); }); } function warning(n) { let items = ["不更新,但仍是試試新腳本(不保證能用)", "清除本地下載的新腳本,使用默認腳本", "點擊這裏下載新APP"]; let ch = dialogs.select("當前新版本不適用於此舊APP,請更新到新APP。", items, function (index) { if (index >= 0) { if (index === 0) { threads.start(function () { sleep(1000); runRun(n); }); } else if (index === 1) { clearNewScript(); } else if (index === 2) { alert("哪裏下載的舊APP就去哪裏下載新APP,我可沒心思發佈"); } } }); } function runRun(n) { sleep(500); let statue = runGoBrowse(); toastLog("去瀏覽--瀏覽結束"); alert("結束"); } function moveFloating(n) { let i = -1; dialogs.confirm("因爲須要,請將懸浮窗移動至靠左。", "點擊確認表示已完成,直接運行腳本。\n點擊取消則手動前去調整。\n" + "(中間瀏覽過程當中可能會跳轉到淘寶首頁進行瀏覽,此時須要手動再次切回貓鋪。)", function (clear) { if (clear) { console.log("直接運行"); i = 1; } else { toastLog("請將懸浮窗移動至靠左"); i = 0; } }); while (i === -1) { slepp(100); } if (i === 1) { runRun(n); } } function runChoose(n) { let currentVersion = app.versionCode; if (currentVersion === 1) { warning(n); } else { moveFloating(n); } } module.exports = runChoose;
若是你不懂的話,就直接下載使用,記得開啓懸浮窗,而後再切換到淘寶:code
就能夠實現如下效果啦:orm
— 完 —遊戲
APK下載:
一、掃碼關注「旁觀者qing」訂閱號
二、回覆「apk」便可獲取