用Github上的高星项目,告诉你程序员过双十一的正确姿势

马上到“双十一”了,今年天猫推出了瓜分红包的活动,可以通过浏览店铺等方式赚取喵币,为记得更多获取红包的机会,而笔者做为程序员不愿意在京东、天猫上浪费时间。就到Github上去逛了逛,没想到发现一个可以自动刷喵币的项目,笔者亲测成功,现在把攻略推荐给大家。这个项目整体上说和我之前那个《如何用爬虫技术帮助孩子秒到心仪的幼儿园》https://blog.csdn.net/BEYONDMA/article/details/87902276的思路类似,都是使用自动按键的方式来达到与人工点击相同的效果,并且防止底层的注入带来的风险。虽然实现不难,但是思路很好。

1.使用攻略

1.下载安装包

到github上把相关的安装包下载到手机上https://github.com/sleepybear1113/taobaoVisitingVenues/blob/master/%E6%B7%98%E5%AE%9D%E5%96%B5%E5%B8%81_v1.1.0.apk

2.嵌入悬浮窗口权限,这个各个手机不一样,程序安装完成后一般都有正确揭示。

3.选择功能方式:启动程序,这时会有悬浮窗口出现,先在选择功能项中选择“去浏览+去逛店”的方式。

4.打开淘宝,进入喵币页面:一般每天首次登陆淘宝APP的“双十一合伙人”也就是攒喵币的页面时,都会有弹出有以下页面。这个页面需要大家手工关闭后APP才能正常开始。

 4.点击启动:在悬浮窖上点击开始,就能自动逛淘宝得喵币了。

5.程序结束:程序运行完成后就自动退出了。

 

2.代码初探

本身这个项目是基于auto.js pro 7.0,其实就是手机版本的按键精灵。其中主逻辑都在https://github.com/sleepybear1113/taobaoVisitingVenues/blob/master/src_code/script.js这个脚本中实现,截取主要部分说明如下:

toastLog("开始");


/**
 * 点击领喵币的按钮
 * @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() {
    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);
}

/**
 * 逛店有没有满
 * @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() {
    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 < 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();
            if (isSuccess !== 1) {
                reopenAgain();
            } else break;
        }

        if (isSuccess === -1) break; //如果 3 次之后还是不行,那就 -1

        toastLog(i);

        let jw = judgeWay(); //去浏览之后,判断是不是滑动浏览。这里最多延时 7s

        sleep(1000);

        // 进行滑动。如果是滑动的话,就是店铺,判断是否有店铺签到的操作。
        if (jw === 0) {
            checkIn(isCheckIn);
            swipeUp();
        } else if (jw === -1) { //如果没有滑动浏览,那就可能不需要,或者浏览到上限了
            if (isFull() === 1) { // 这里的最多延时 2s
                console.log("已达上限");
                backToBefore();
                reopenAgain();
                continue;
            }
        }


        // 这里通过不同的情况区分不同的延时
        if (jw === -1) {
            sleep(1000 * 10);
            console.log("10s");

        } else {
            sleep(1000 * 14);
            console.log("14s");
        }




        let isF = browseFinish(); //右下角是否出现浏览完成类似的字样。最多延时 2.5s
        if (isF === 0) {
            console.log("浏览结束,返回");
        } else if (isF === -1) {
            console.log("浏览未正常结束,返回");
        }

        backToBefore();
    }
}

以上就是我今天在Github上看到的惊喜,不知道对于各位读者能否有帮助。

 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值