首頁>科技>

目錄煩人的前奏用程式碼自動蓋樓如何使用技術分析煩人的前奏私信我回復:蓋樓apk 即可獲取文中的軟體安裝包

最近雙十一,想必你一定會收到以下資訊:

最怕的是,你收到了女神的求助資訊,你幫也不是,不幫也不是。

用程式碼自動蓋樓

要告訴你的好訊息是,勤奮的程式設計師小哥哥已經開發出使用程式碼來進行蓋樓的程式了。

一開始還沒有人關注這個APP,慢慢地蓋樓的人多了,這個專案也就火起來了,現在已經有 770 多個 start 了。

那麼這麼神奇的 APP 是使用了什麼技術呢?這個技術是基於 auto.js 框架來實現的。以控制元件為基礎,能自動執行一些操作,實現懸浮窗錄製和執行。

使用方法私信我回復:蓋樓apk 即可獲取文中的軟體安裝包

安裝好 APP 之後,記得開啟懸浮窗

注意事項:你要點到領喵幣那,然後他就會開始自動瀏覽了,但是如果碰到不是瀏覽的任務,它好像就自動結束了,你只能在繼續點開始。好多網友都成功了,你也試試吧?

技術分析

其核心程式碼為:(如果你看不懂的話,直接使用 APK 安裝包就可以了)

toastLog("開始");let deviceWidth = device.width;let deviceHeight = device.height;let isCheckIn = false;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);}/** * 點選領喵幣的按鈕 * @param delay 點選之後延遲多久進行下一個函式 * @returns {number} */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; } if (items.length === 0) { let go = text("領喵幣").findOne(1000); if (go != null) { console.log("點選--領喵幣"); clickItemInCenter(go); sleep(delay); return 1; } } return -1;}/** * 判斷是否開啟領取中心 * @returns {number} */function isOpenBeginning() { let signIn = textContains("簽到").findOnce(); if (signIn != null) { console.log("成功--開啟領取中心"); return 1; } return -1;}/** * 確保開啟領取中心 * @param waitDelay * @returns {number} */function ensureOpenBeginning(waitDelay) { if (isOpenBeginning() === -1) { openBeginningBtnItem(waitDelay); } if (isOpenBeginning() === 1) return 1; console.error("失敗--開啟領取中心"); toast("失敗--開啟領取中心"); return -1;}function checkIn(flag) { console.log("判斷店鋪簽到"); if (flag === true) { let getMoney = desc("簽到領喵幣").findOne(500); if (getMoney != null) { clickItemInCenter(getMoney); console.log("點選簽到"); sleep(2000); let happyToGet = desc("開心收下").findOnce(); clickItemInCenter(happyToGet); console.log("店鋪簽到獲得喵幣"); sleep(500); } }}/** * 向上滑動 */function swipeUp(n) { console.log("滑動螢幕"); let x = parseInt(deviceWidth / 2); let duration = 500; let y = [parseInt(deviceHeight * 0.75), parseInt(deviceHeight * 0.25)]; for (let i = 0; i < n; i++) { swipe(x, y[0], x, y[1], duration); }}/** * 逛店有沒有滿 * @returns {number} */function isFull() { for (let i = 0; i < 10; i++) { if (descContains("已達上限").findOnce() || textContains("已達上限").findOnce()) { console.log("今日已達上限"); return 1; } sleep(200); } return 0}/** * 執行瀏覽結束的判斷操作 * @returns {number} */function browseFinish() { for (let i = 0; i < 10; i++) { let normalFinishDesc = descContains("已獲得").findOnce(); let normalFinishText = textContains("已獲得").findOnce(); let swipeFinishDesc = descContains("任務完成").findOnce(); let swipeFinishText = textContains("任務完成").findOnce(); if (normalFinishDesc != null || swipeFinishDesc != null || normalFinishText != null || swipeFinishText != null) { console.log("瀏覽結束"); return 0; } sleep(250); } console.log("瀏覽未知"); return -1;}/** * 判斷進入瀏覽的時候是否需要滑動 * @returns {number} */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;}/** * 關閉領取中心再開啟 * @returns {number} */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(2000); } return -1;}/** * 點選-去瀏覽 按鈕 * @returns {number} */function clickGoBrowse(n) { // 尋找-去瀏覽-的按鈕 let browse = text("去瀏覽").findOne(1000); if (browse != null) { let guessYouLike = textContains("猜你喜歡").findOnce(); //尋找-猜你喜歡-的按鈕 //如果出現了-猜你喜歡,那就點選下一個-去瀏覽-的按鈕 if (guessYouLike != null) { console.log("出現猜你喜歡"); // 這裡判斷控制元件的 top 座標是否一樣(其實我也不知道直接判斷控制元件是否一樣行不行) let pp = browse.parent().bounds().top; let ppp = guessYouLike.parent().parent().bounds().top; if (ppp === pp) { console.log("跳過--猜你喜歡"); let allBrowse = text("去瀏覽").find(); // 如果僅剩下一個-去瀏覽-的按鈕,並且外圈迴圈重複不到 2 次,那就進行返回 0 進行 reopen() if (allBrowse.length <= 1 && n <= 1) { return 0; } // 迴圈找到一個 top 座標不是和-猜你喜歡-一樣的 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 clickSkip() { let skip = descMatches("^[0-6]\\\\d{0}s$").findOnce(); if (skip != null) { console.log("滑動跳過"); swipeUp(1); }else console.log("無廣告");}/** * 迴圈執行瀏覽操作 */function runGoBrowse() { let isSuccess = 1; // 進行迴圈瀏覽 for (let i = 0; i < 50; i++) { isSuccess = ensureOpenBeginning(2000); // 開啟領取中心 if (isSuccess !== 1) break; //開啟失敗就 -1 // 每 5 次重新開關領取中心進行重新整理 if (i % 5 === 0) { reopenAgain(); } // 點選去瀏覽,如果沒找到 去瀏覽 的按鈕,那就關閉領取中心再開啟,三次 for (let j = 0; j < 3; j++) { isSuccess = clickGoBrowse(j); if (isSuccess !== 1) { reopenAgain(); } else break; } if (isSuccess === -1) break; //如果 3 次之後還是不行,那就 -1 toastLog(i); // 第幾次迴圈 sleep(2000); clickSkip(); // 判斷廣告跳過,向上滑動 let jw = judgeWay(); //去瀏覽之後,判斷是不是滑動瀏覽。這裡最多延時 7s // 進行滑動。如果是滑動的話,就是店鋪,判斷是否有店鋪簽到的操作。 if (jw === 0) { checkIn(isCheckIn); swipeUp(2); } else if (jw === -1) { //如果沒有滑動瀏覽,那就可能不需要,或者瀏覽到上限了 if (isFull() === 1) { // 這裡的最多延時 2s console.log("已達上限"); backToBefore(); reopenAgain(); continue; } } // 這裡通過不同的情況區分不同的延時 if (jw === -1) { console.log("10s"); sleep(1000 * 10); } else { console.log("14s"); sleep(1000 * 14); } let isF = browseFinish(); //右下角是否出現瀏覽完成類似的字樣。最多延時 2.5s if (isF === 0) { console.log("瀏覽結束,返回"); } else if (isF === -1) { console.log("瀏覽未正常結束,返回"); } backToBefore(); }}/** * 可能存在需要兩次返回的情況 */function backToBefore() { back(); sleep(2000); let isGoingTo = text("正在前往會場").findOnce(); if (isGoingTo != null) { back(); sleep(2000); } else { isGoingTo = desc("正在前往會場").findOnce(); if (isGoingTo != null) { 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 runRun() { 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 oldVersionWarning(v) { let items = ["依舊嘗試繼續", "清除本地下載的新指令碼,使用預設指令碼", "新APP"]; let choice = -10; dialogs.select("當前新版本可能不適用於此舊APP,請更新到新APP。", items, function (index) { choice = index; }); while (choice === -10) { sleep(100); } if (choice === -1) { toastLog("未選擇!"); } else if (choice === 0) { if (v <= 6) { console.log(v); moveFloating(); } runRun(); } else if (choice === 1) { clearNewScript(); } else if (choice === 3) { alert("暫沒有開放下載新 APP 的功能,請自行下載"); }}function versionChoice(v) { let vv = parseInt(v); let minSuitVersion = 10; console.log("適合執行的最低版本" + minSuitVersion); if (vv < minSuitVersion) { oldVersionWarning(vv); } else { runRun(); }}function runChoose(n) { if (n === 1) isCheckIn = true; let currentVersion = app.versionCode; console.log("當前版本:" + currentVersion); versionChoice(currentVersion);}module.exports = runChoose;

最新評論
  • 1 #

    啥用都沒有,沒反應

  • 2 #

    一個app要5/60個許可權的嗎

  • 3 #

    到現在我都不知道怎麼玩兒蓋樓

  • 4 #

    領喵幣的早就有了,還以為蓋樓

  • 5 #

    說到底那個人不重要而已如果是重要的人叫你,你看你會不會去,不重要的人就會推三阻四的

  • 6 #

    不能蓋樓只能領喵幣

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 小米智慧手錶,科技與實力並存!抄襲是對原創最大的致敬