別再讓我幫你蓋樓了行不?給個腳本自動蓋樓領喵幣,附APK

  • 2019 年 11 月 8 日
  • 筆記

題 圖:pexels

預 計 閱 讀 時 間:8分鐘

這幾天,雙十一的活動有沒有把你折騰的不輕呢?

要知道阿里每年都會發放大量紅包、各種優惠券和各種互助遊戲……而這兩天,馬爸爸的「ATM」們可都沉迷於這些個互助遊戲里不可自拔,吾日三省吾身:簽到了?做任務了么?升級了么?:

一般我們程式設計師對這種遊戲都是沒什麼太大興趣,畢竟每天都有找不完的Bug,加不完的班,但是假如在這時候你的女神向你求幫助的時候,就你那個等級你拿的出手么?

所以,程式設計師怎麼能錯過這麼一個在女神面前展現專業能力的時候呢,這不,今天猿妹就在GitHub上發現,有程式設計師寫了一個小腳本,可以每天自動做任務,領喵幣,這下幫女神蓋樓,再也不用擔心等級低了:

可以看出來目前這個小腳本還沒有引起程式設計師的注意,一個星星都還沒獲得。

GitHub地址:

https://github.com/sleepybear1113/taobaoVisitingVenues

其實,這個腳本並不難,基於auto.js框架來實現,auto.js是一個支援無障礙服務的Android平台上的JavaScript IDE,以控制項為基礎,能自動運行一些操作,實現懸浮窗錄製和運行。所以這個腳本只支援Android系統。看不懂腳本的直接滑到下面獲取 apk 安裝包就可以了。

詳細的腳本程式碼如下:

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;

如果你不懂的話,就直接下載使用,記得開啟懸浮窗,需要打開懸浮框許可權,然後再切換到淘寶:

附APK下載:

全文完