簡單寫個自動化腳本,坐好它自己會動

薅羊毛!釋放雙手全自動蓋樓刷淘寶喵幣!附APK

 

這幾天,雙十一的活動有沒有把你折騰的不輕呢?如果沒有,只有兩種可能:一,你沒女朋友;二,你沒有女性朋友,不然你一定會收到如下消息

 

 

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

 

 

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

 

 

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

 

 

可以看出來目前這個小腳本還沒有引起程序員的注意,一個星星都還沒獲得(GitHub地址:https://github.com/sleepybear1113/taobaoVisitingVenues)

 

 

其實,這個腳本並不難,基於auto.js框架來實現,auto.js是一個支持無障礙服務的Android平臺上的JavaScript IDE,以控件爲基礎,能自動運行一些操作,實現懸浮窗錄製和運行。所以這個腳本只支持安卓系統。

 

詳細的腳本代碼如下:

 


 

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;

 

如果你不懂的話,就直接下載使用,記得開啓懸浮窗,然後再切換到淘寶:

 

 

就可以實現以下效果啦

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章