一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法

声明

仅供个人使用、禁止商用,请勿用于薅羊毛非法倒卖等违法行为,由此产生的法律后果需自行承担,阅读下文代表认同以上协议。

教程

Andriod用户:使用AutoJS管理脚本

如果您想在电脑上完成下述操作,您也可以安装模拟器(但是部分模拟器可能会出现京东、淘宝安装之后打不开的情况,因此还是强烈建议使用真机)

图片[1]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

免费版安装及配置说明

软件下载后可能提示去官网使用最新付费版,我们点空白处跳过即可,不用理会弹窗。

图片[2]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

同时,使用该软件需要启用无障碍服务

图片[3]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

点击启用即可

图片[4]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

破解版安装及配置说明

破解版同样需要向免费版一样开启无障碍模式,但无需登录即可享受会员全部功能

图片[5]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

点击右下角的+号,创建文件

图片[6]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

创建相关js文件

图片[7]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

加入相关代码即可使用,完整的代码见下方

  • 双十一京东相关代码
// 需要完成的任务列表
var TASK_LIST = ["浏览并关注", "浏览8s", "累计浏览","浏览并关注可得2000", "浏览可得", "去首页浮层进入", "浏览5个品牌墙店铺", "小程序", "浏览5个品牌墙店铺"];
// 过渡操作
var PASS_LIST = ['请选择要使用的应用', '我知道了', '取消', "京口令已复制"];
// 判断停留时间
var JUDGE_TIME = 0;
// 定时器
var interval;
// 已完成序号
var finished_task_num = new Array();
// 当前序号
var current_task_num = 0;
// 浏览就返回标记
var isBackFlag = false;
// 小程序标记
var isXcx = false;
var appName = "com.jingdong.app.mall";
var huodong_indexInParent_num = 9;
// 记录活动页面头部坐标
var headerXY;
init();

/**
 * 初始化
 */
function init() {

    // 子线程监听脚本
    threads.start(function () {
        events.setKeyInterceptionEnabled("volume_up", true);
        //启用按键监听
        events.observeKey();
        //监听音量上键按下
        events.onKeyDown("volume_up", function (event) {
            console.log("脚本退出!")
            exit();
        });
    });

    start();

    // 子线程开启计时
    threads.start(function () {
        if (interval == null) {
            // 开启计时器,进行卡顿计时
            // 启动定时器前,将计数器归为0
            JUDGE_TIME = 0;
            log("开启定时器");
            interval = setInterval(function () {
                JUDGE_TIME = JUDGE_TIME + 1;
            }, 1000);
        }
    });

    while (true) {

        transitioPperation();

        enterActivity();

        recoverApp();

        var flag = getNeedSelector();

        viewTask(flag);

        addMarketCar();

    }


}

/**
 * 启动京东
 */
function start() {
    auto.waitFor()
    if (launch(appName)) {
        console.info("启动京东APP");
        console.info("author:czj");
        console.info("地址:https://github.com/czj2369/jd_tb_auto");
    }
    console.show();
}

/**
 * 进入做任务界面
 */
function enterActivity() {
    if (!text("累计任务奖励").exists()) {
        sleep(4000);
        if (text("累计任务奖励").exists()) {
            console.info("已经在任务界面");
            sleep(1000);
            headerXY = id("a96").findOne().bounds();
        } else {
            if (desc("浮层活动").exists()) {
                console.info("点击浮层活动");
                var huodong = desc("浮层活动").findOne().bounds();
                randomClick(huodong.centerX(), huodong.centerY());
                sleep(1000);

            }

            // 获取进入做任务界面的控件
            var button = className('android.view.View')
                .depth(14)
                .indexInParent(huodong_indexInParent_num)
                .drawingOrder(0)
                .clickable();
            if (button.exists()) {
                console.info("点击进入做任务界面")
                var rect = button.findOne().bounds();
                randomClick(rect.centerX(), rect.centerY());
                sleep(1000);
                headerXY = id("a96").findOne().bounds();

            } else {
                huodong_indexInParent_num = huodong_indexInParent_num + 1;
                if (huodong_indexInParent_num == 10) {
                    console.info("无法自动进入做任务界面,请手动进入!");
                    huodong_indexInParent_num = 9;

                }
            }
        }
        sleep(1000);
    }
}

/**
 * 去完成任务
 * @param {是否点击任务标识} flag 
 */
function viewTask(flag) {
    // 根据坐标点击任务,判断哪些需要进行
    sleep(2000);
    while (true && flag) {
        if ((textStartsWith("获得").exists() && textEndsWith("汪汪币").exists()) || text("已浏览").exists()) {
            console.info("任务完成,返回");
            viewAndFollow();
            // 重置计时
            JUDGE_TIME = 0;
            break;
        } else if (text("任务已达上限").exists()) {
            console.info("任务已达上限,切换已完成按钮");
            // 将当前任务序号添加到列表中,防止后续点到
            finished_task_num[finished_task_num.length] = current_task_num;
            viewAndFollow();
            // 重置计时
            JUDGE_TIME = 0;
            break;
        } else if (textContains('会员授权协议').exists()) {
            console.info("不授权加入会员,切换已完成按钮");
            // 将当前任务序号添加到列表中,防止后续点到
            finished_task_num[finished_task_num.length] = current_task_num;
            viewAndFollow();
            // 重置计时
            JUDGE_TIME = 0;
            break;
        } else if (textContains('当前页点击浏览5个').exists() || textContains('当前页浏览加购').exists()) {
            console.info("当前为加入购物车任务");
            // 重置计时
            JUDGE_TIME = 0;
            break;
        } else if (text("互动种草城").exists()) {
            console.info("当前为互动种草城任务");
            // 重置计时
            JUDGE_TIME = 0;
            if (interactionGrassPlanting()) {
                back();
                break;
            }
            break;
        } else if (text("到底了,没有更多了~").exists() && !text("消息").exists() && !text("扫啊扫").exists()
            && !(textStartsWith("当前进度").exists() && textEndsWith("10").exists())) {
            console.info("到底了,没有更多了~");
            sleep(1000);
            // 重置计时
            JUDGE_TIME = 0;
            var count = 0;
            while (count <= 5) {
                if (undefined === headerXY) {
                    headerXY = id("a96").findOne().bounds();
                }
                var rightx = headerXY.right;
                var righty = headerXY.bottom + 300;
                while (click(rightx, righty)) {
                    console.info("尝试点击坐标:", rightx, righty);
                    count = count + 1;
                    sleep(6000);
                    if (!text("到底了,没有更多了~").exists()) {
                        if (id("aqw").click()) {
                            sleep(2000);
                            console.info("尝试返回", count);
                            back();
                            break;
                        }
                    } else {
                        righty = righty + 50;
                    }
                    if(righty >= 1600) {
                        break;
                    }
                }
            }
            swipe(807, 314, 807, 414, 1);
            sleep(2000);
            break;
        } else if (text("消息").exists() && text("扫啊扫").exists()) {
            console.warn("因为某些原因回到首页,重新进入活动界面");
            enterActivity();
        } else if (text("天天都能领").exists()) {
            sleep(2000);
            console.info("天天都能领");
            // 重置计时
            JUDGE_TIME = 0;
            var button = className('android.view.View')
                .depth(16)
                .indexInParent(3)
                .drawingOrder(0)
                .clickable().findOne().bounds();
            if (randomClick(button.centerX(), button.centerY())) {
                sleep(1000);
                console.log("点我收下");
                if (back()) {
                    break;
                }
            }
        } else if (text("邀请新朋友 更快赚现金").exists()) {
            sleep(2000);
            console.info("邀请新朋友");
            // 重置计时
            JUDGE_TIME = 0;
            var button = className('android.view.View')
                .depth(20)
                .indexInParent(0)
                .drawingOrder(0)
                .clickable().find()[0].bounds();
            var y = button.bottom;
            while (click(button.right, y)) {
                if (!text("累计任务奖励").exists()) {
                    back();
                    sleep(3000);
                    break;
                } else{
                    y = y + 100;
                }
            }
            break;
        } else if (text('京东11.11热爱环...').exists()) {
            console.info("下单任务,跳过");
            back();
        } else if (isBackFlag) {
            console.info("进入浏览就返回任务");
            sleep(2000);
            viewAndFollow();
            isBackFlag = false;
            break;
        } else if (isXcx) {
            console.info("进入小程序任务");
            // 重置计时
            JUDGE_TIME = 0;
            sleep(2000);
            launch(appName);
            isXcx = false;
            break;
        } else {
            if (recoverApp()) {
                break;
            }
        }
    }

}

/**
 * 加入购物车
 */
function addMarketCar() {
    if (textContains('当前页点击浏览5个').exists() || textContains('当前页浏览加购').exists()) {
        const productList = className('android.view.View').indexInParent(5).clickable().find();
        //const productList = className('android.widget.Button').depth(19).clickable().find()
        var count = 0;
        for (index = 0; index < productList.length; index++) {
            if (count == 5) {
                if (back()) {
                    sleep(3000)
                    count = 0;
                    break;
                }
            }
            if (productList[index].click()) {
                // 重置计时
                JUDGE_TIME = 0;
                log("加入购物车任务:正在添加第" + (index + 1) + "个商品");
                sleep(2000);
                while (true) {
                    if (text("购物车").exists() && back()) {
                        count = count + 1;
                        sleep(2000);
                        if (!text("购物车").exists()) {
                            break;
                        }
                    }
                }
            }
        }
    }

}

/**
 * 互动种草城
 * @returns 
 */
function interactionGrassPlanting() {
    var count = 0;
    while (true) {
        if (className('android.view.View').indexInParent(4).depth(14).findOne().click()) {
            // 重置计时
            JUDGE_TIME = 0;
            console.info("去逛逛");
            sleep(2000);
            if (back()) {
                sleep(2000);
                count = count + 1;
                if (count == 5) {
                    return true;
                }
            }
        }
    }

}

/**
 * 获取需要进行的控件
 * @returns 
 */
function getNeedSelector() {
    var allSelector = className('android.view.View')
        .depth(19)
        .indexInParent(3)
        .drawingOrder(0)
        .clickable()
        .find();

    for (let index = 0; index < allSelector.length; index++) {
        for (var i = 0; i < TASK_LIST.length; i++) {
            // 获取具有需要完成任务字符串的控件集合
            var list = allSelector[index].parent().findByText(TASK_LIST[i]);
            // 如果长度大于0则表示存在该控件
            if (list.size() > 0) {
                // 获取不在序列中的序号
                if (finished_task_num.indexOf(index) < 0) {
                    console.info("当前已完成序列:", finished_task_num)
                    current_task_num = index;
                } else {
                    continue;
                }

                // 如果是浏览就返回的任务,将标记设为true
                isBackFlag = (TASK_LIST[i].indexOf("浏览可得") >= 0 || TASK_LIST[i].indexOf("浏览并关注可得2000") >= 0) ? true : false;
                // 如果是小程序任务,将小程序标记设为true
                isXcx = (TASK_LIST[i].indexOf("小程序") >= 0) ? true : false;
                var rect = allSelector[current_task_num].bounds();
                if (text("累计任务奖励").exists()) {
                    console.info("去完成任务,当前任务序列:", current_task_num)
                    randomClick(rect.centerX(), rect.centerY());
                    //console.info("开始任务:", allSelector[current_task_num].parent().findByText(TASK_LIST[i]).get(0).text());
                    return true;
                }
            }
        }
    }
}

/**
 * 返回
 */
function viewAndFollow() {
    sleep(1000);
    back();
    sleep(3000);
}

/**
 * 自动判断程序是否卡顿,恢复方法
 * 判断依据:1.不在活动界面 2.停留某个界面长达30s
 * @returns 
 */
function recoverApp() {
    if (!text("累计任务奖励").exists() && JUDGE_TIME > 30) {
        if (back()) {
            // 计时器重置
            JUDGE_TIME = 0;
            console.warn("停留某个页面超过30s,自动返回,重置定时器。");
            return true;
        }
    } else {
        return false;
    }
}

/**
 * 过渡操作
 */
function transitioPperation() {
    for (let index = 0; index < PASS_LIST.length; index++) {
        if (text(PASS_LIST[index]).exists()) {
            console.info("过渡操作:", PASS_LIST[index]);
            if (PASS_LIST[index].indexOf("请选择要使用的应用") >= 0) {
                back();
            } else if (text("查看同款").exists()) {
                text(PASS_LIST[index]).click();
            } else if (PASS_LIST[index].indexOf("已复制") >= 0) {
                className('android.widget.LinearLayout')
                    .depth(4)
                    .indexInParent(1)
                    .drawingOrder(2)
                    .clickable()
                    .findOne().click();
            } else {
                text(PASS_LIST[index]).click();
            }
            sleep(1000);
        }
    }
}

/**
 * 点击
 * @param {横坐标} x 
 * @param {纵坐标} y 
 */
function randomClick(x, y) {
    var rx = random(0, 5);
    var ry = random(0, 5);

    click(x + rx, y + ry);
    sleep(2000);
    return true;
}
  • 双十一淘宝相关代码
// 需要忽略的任务中包含的关键字
var IGNORE_LIST = ['农场', '芭芭农场', '下单', '蚂蚁森林', '淘特', '点淘', '充话费', '参与合伙', '喂小鸡', '斗地主', '续卡', '88VIP', '消消乐'];
// 过渡操作
var PASS_LIST = ['我再想想', '我知道了', '开心收下'];

var app_package = "com.taobao.taobao";
var app_name = "淘宝";

// 点击之后返回的任务
const BACK_LIST = [];
const GO_View = '去浏览';
const GO_FINISH = '去完成';
const GO_SEARCH = '去搜索';
// 返回标记
const FINISHED_TASK = ['任务完成', '全部完成啦', '喵糖已发放', '任务已完成'];
const VIEW_MOST = '去逛逛';
// 判定是否进入到喵糖总动员
var isEnterTaskUI = false;
// 判断停留时间
var JUDGE_TIME = 0;
// 定时器
var interval;

var options = ["做任务", "掷骰子"];
var i = dialogs.select("请选择一个选项", options);
if (i >= 0) {
    console.info("您选择的是" + options[i]);
} else {
    toast("您取消了选择");
}

init();

/**
 * 初始化
 */
function init() {
    // 子线程监听脚本
    threads.start(function () {
        events.setKeyInterceptionEnabled("volume_up", true);
        //启用按键监听
        events.observeKey();
        //监听音量上键按下
        events.onKeyDown("volume_up", function (event) {
            console.log("脚本退出!")
            exit();
        });
    });

    start();

    // 子线程开启计时
    threads.start(function () {
        if (interval == null) {
            // 开启计时器,进行卡顿计时
            // 启动定时器前,将计数器归为0
            JUDGE_TIME = 0;
            log("开启定时器");
            interval = setInterval(function () {
                JUDGE_TIME = JUDGE_TIME + 1;
            }, 1000);
        }
    });

    if (0 == i) {
        while (true) {

            recoverApp();

            enterActivity();

            viewTask();

            transitioPperation();
        }
    } else {
        while (!enterMiaoTang() && !textContains("骰子").exists()) {

        }
        var textContent = textContains("骰子").findOnce().text();
        var count = textContent.split(",")[1];
        console.info("获取当前骰子数:", count);
        while (count > 0) {
            if (textContains("骰子").findOnce().click()) {
                // 计时器重置
                JUDGE_TIME = 0;
                count = count - 1;
                console.info("掷骰子,剩余次数:", count);
                sleep(5000);
            }
        }
        console.info("掷骰子任务结束");
        exit();
    }
}

/**
 * 启动淘宝
 */
function start() {
    auto.waitFor()

    console.info("author:czj");
    console.info("地址:https://github.com/czj2369/jd_tb_auto");
    if (launch(app_package)) {
        console.info("启动" + app_name + "APP");
    } else {
        console.info("请手动启动" + app_name + "APP")
    }

    console.show();
}

/**
 * 进入活动中心
 */
function enterActivity() {
    const SIGN_IN = '签到';
    const GET_REWARD = '领取奖励';
    const CUT_TEN_BILION = '赚糖';
    enterMiaoTang();

    // 签到
    if (text(SIGN_IN).exists()) {
        text(SIGN_IN).findOne().click();
    }

    //领取奖励
    if (text(GET_REWARD).exists()) {
        text(GET_REWARD).findOne().click();
    }

    // 进入做任务界面
    if (textContains(CUT_TEN_BILION).exists()) {
        var button = textContains(CUT_TEN_BILION).findOnce().bounds();
        click(button.centerX(), button.centerY());
    }

    if (isEnterTaskUI && !textContains(CUT_TEN_BILION).exists()) {
        if (back()) {
            isEnterTaskUI = false;
        }

    }
    return false;
}

/**
 * 进入喵糖总动员
 * @returns 
 */
function enterMiaoTang() {
    if (className('android.widget.FrameLayout').depth(17).indexInParent(14).clickable().find().length == 1) {
        console.info("进入喵糖总动员,稍等5s即刻开始任务");
        var button = className('android.widget.FrameLayout').depth(17).indexInParent(14).clickable().find()[0].bounds();
        click(button.centerX(), button.centerY());
        isEnterTaskUI = true;
        sleep(5000);
        return true;
    } else {
        if (desc("我的淘宝").exists() && desc("我的淘宝").findOne().click()) {
            sleep(3000);
            if (descContains("赢20亿红包").exists() && descContains("赢20亿红包").findOne().click()) {
                console.info("进入喵糖总动员,稍等7s即刻开始任务");
                isEnterTaskUI = true;
                sleep(7000);
                return true;
            }
        }
    }
}

/**
 * 完成查看任务
 */
function viewTask() {
    // 去完成
    if (text(GO_FINISH).exists()) {
        sleep(500);
        // 获取多个'去完成' 或者 '去浏览'
        var button = text(GO_FINISH).find();
        for (index = 0; index < button.length; index++) {
            var buttonParent = button[index].parent();
            // 遍历'去完成'或者'去浏览'的父控件下面的子控件,判断是否存在IGNORE_LIST中包含的文字,如果存在,不执行该任务,否则执行
            try {
                if (!recursionControl(buttonParent)) {
                    var isViewAndFollow = false;
                    // 判断是否直接返回
                    buttonParent.child(0).children().forEach(element => {
                        print(element.text())
                        for (i = 0; i < BACK_LIST.length; i++) {
                            if (element.text().indexOf(BACK_LIST[i]) >= 0) {
                                isViewAndFollow = true;
                            }
                        }
                    });

                    log("正在进行任务:" + buttonParent.child(0).children()[0].text());

                    if (isViewAndFollow) {
                        viewAndFollow();
                    }

                    button[index].click();
                    sleep(4000);
                    if (id("titlebar").exists()) {
                        huDong();
                    }
                    // 计时器重置
                    JUDGE_TIME = 0;
                    sleep(500)
                    break;
                }
            } catch (error) {
                console.error(error);
            }
        }
    }

    // 去浏览
    if (text(GO_View).exists()) {
        sleep(500);
        text(GO_View).findOne().click();
        // 计时器重置
        JUDGE_TIME = 0;
        log("正在进行任务:" + text(GO_View).findOne().parent().child(0).children()[0].text());
        sleep(2000);
    }

    // 去搜索
    if (text(GO_SEARCH).exists()) {
        sleep(500);
        text(GO_SEARCH).findOne().click();
        // 计时器重置
        JUDGE_TIME = 0;
        log("正在进行任务:" + text(GO_SEARCH).findOne().parent().child(0).children()[0].text());
        sleep(2000);
    }

    // 去逛逛
    if (textContains(VIEW_MOST).exists()) {
        textContains(VIEW_MOST).findOnce().click();
        // 计时器重置
        JUDGE_TIME = 0;
        log("正在进行任务:" + textContains(VIEW_MOST).findOnce().parent().child(0).children()[0].text());
        sleep(2000);
    }

    // 天天去领钱
    if (text("打开链接").exists()) {
        text("打开链接").findOne().click();
        // 计时器重置
        JUDGE_TIME = 0;
        sleep(2000);
    }
    isFinshed(FINISHED_TASK);

}

function customBack() {
    while (back()) {
        break;
    }
}

/**
 * 互动任务
 */
function huDong() {
    if (id("titlebar").exists()) {
        console.info("进入互动任务");
        var titleBarXY = id("titlebar").findOne().bounds();
        var x = titleBarXY.centerX();
        var y = titleBarXY.centerY();

        while (!textContains("执行").exists() && click(x, y)) {
            console.info("未点击到任务,重试");
            y = y + 50;
        }

        y = titleBarXY.centerY();

        while (textContains("喵糖+1").exists() && textContains("执行").exists() && click(x, y)) {
            console.info("点击屏幕");
            y = y + 50;
        }

    }
}

/**
 * 判断是不是完成任务
 * @param {控件名称} uiName 
 * @returns 
 */
function isFinshed(uiName) {
    for (i = 0; i < uiName.length; i++) {
        if (textContains(uiName[i]).exists() || descContains(uiName[i]).exists()) {
            back();
            sleep(500);
            break;
        }
    }

    return false;
}

// 递归遍历控件是否包含忽略的关键词
function recursionControl(parentControl) {
    var retFlag = false;
    // 遍历子控件是否包含忽略关键词
    parentControl.child(0).children().forEach(element => {
        for (ignoreIndex = 0; ignoreIndex < IGNORE_LIST.length; ignoreIndex++) {
            if (element.text().indexOf(IGNORE_LIST[ignoreIndex]) >= 0) {
                retFlag = true;
            }
        }
    });
    return retFlag;
}

/**
 * 返回
 */
function viewAndFollow() {
    sleep(1000);
    back();
    sleep(1000);
}

/**
 * 自动判断程序是否卡顿,恢复方法
 * 判断依据:1.不在活动界面 2.停留某个界面长达30s
 * @returns 
 */
function recoverApp() {
    if (!text("查看红包").exists() && JUDGE_TIME > 45) {
        if (back()) {
            // 计时器重置
            JUDGE_TIME = 0;
            console.warn("停留某个页面超过45s,自动返回,重置定时器。");
            return true;
        }
    } else {
        return false;
    }
}

/**
 * 过渡操作
 */
function transitioPperation() {
    for (let index = 0; index < PASS_LIST.length; index++) {
        if (text(PASS_LIST[index]).exists()) {
            text(PASS_LIST[index]).click();
            console.info("过渡操作:", PASS_LIST[index]);
            sleep(500);
        }
    }
}

加入完代码之后,点击运行即可

图片[8]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

这里便会自动打开京东/淘宝的APP,您需要在使用脚本前登录好账户,这样便可以完成相关签到等操作

图片[9]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog
图片[10]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

其他脚本分享

Hamibot平台

https://hamibot.cn/referrals/akly

当然,你也可以使用上面的平台来完成脚本的使用。里面有很多脚本,目前绝大多数脚本都是免费使用的,感觉还是不错的哦!

  • 适用于 Android 系统的自动化工具,能操控任意 APP,实现自动化操作,提高工作效率。
图片[11]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

同时你还可以提交相关需求,让开发者来完善,这点还比较人性化。

图片[12]-一键完成淘宝/京东双十一活动脚本 由此引出的各类脚本使用方法-FancyPig's blog

使用方法

© 版权声明
THE END
喜欢就支持一下吧
点赞120赞赏
分享
评论 共145条

请登录后发表评论