前言

本脚本仅供学习交流之用,使用者如何使用与本文作者无关。

AutoJS下载 & 教程

脚本【控件定位版】

脚本

//遇到问题请在https://chrxw.com留言
//Ver:2.3 By Chr_([email protected])
//增强模式,支持自动加购任务,如果不需要请把true改成false
var adv_mode = true;
auto.waitFor();
toast('\n脚本开始运行\n请切换到任务页');
className("android.view.View").text("做任务领金币").waitFor();
if (!className("android.view.View").textContains("任务每日0点刷新").exists()) {
    className("android.view.View").text("做任务领金币").findOne().parent().click();
}
toast("\n即将开始工作\n中途需退出请按【音量+】终止");
sleep(2000);
var i = 0;
for (;;) {
    var btn = text("去完成").findOnce(i);
    if (btn != null) {
        var task = btn.parent().parent().parent();
        var txt = task.child(0).child(1).text();
        if (txt.search("8秒") != -1) {
            btn.click();
            view();
            i = 0;
        } else if (txt.search("88") != -1) {
            btn.click();
            view();
            i = 0;
        } else if (txt.search("浏览可得") != -1) {
            btn.click();
            view2();
            i = 0;
        } else if (adv_mode & txt.search("5个") != -1) {
            btn.click();
            advview();
            i = 0;
        } else {
            i++;
        }
    } else {
        toast("\n脚本运行完毕\n模拟浏览任务全部完成(大概)");
        exit();
    }
}
//随机延时
function rsleep(s) {
    while (s--) {
        sleep(random(900, 1200));
    }
}
//模拟返回
function advback() {
    for (var i = 0; i < 3; i++) {
        if (!className("android.widget.ImageView").desc("返回").exists()) {
            rslideR(1);
            rsleep(2);
            continue;
        }
        className("android.widget.ImageView").desc("返回").click();
        rsleep(3);
        if (className("android.view.View").textContains("做任务领金币").exists()) {
            return;
        }
    }
    toast("定位不到返回按钮,模拟返回键");
    back();
}
//随机划屏
function rslide(i) {
    while (i--) {
        var x1 = random(200, 900);
        var y1 = random(1200, 1900);
        var x2 = random(200, 900);
        var y2 = random(1000, 1200);
        swipe(x1, y1, x2, y2, 300);
        rsleep(1);
    }
}
//随机划屏,反向
function rslideR(i) {
    while (i--) {
        var x1 = random(200, 900);
        var y1 = random(900, 1300);
        var x2 = random(200, 900);
        var y2 = random(1500, 1900);
        swipe(x1, y1, x2, y2, 300);
        rsleep(1);
    }
}
//模拟浏览(浏览会场任务)
function view() {
    rsleep(3);
    rslide(10);
    className("android.view.View").textStartsWith("恭喜完成").findOne(5000);
    rslideR(1);
    rsleep(3);
    advback();
}
//模拟浏览(浏览会场任务)
function view2() {
    rsleep(1);
    for (var i = 0; i < 4; i++) {
        back();
        rsleep(3);
        if (className("android.view.View").textContains("做任务领金币").exists()) {
            return;
        }
    }
}
//高级浏览(浏览商品、加购任务)
function advview() {
    rsleep(3);
    var add_cart = true;
    var count = 4;
    if (className("android.view.View").textContains("浏览以下5个商品").exists()) {
        add_cart = false;
        count = 3;
    }
    toast(add_cart);
    for (var i = 0; i < 5; i++) {
        var prices = className("android.view.View").textMatches("^¥[0-9]+\.[0-9][0-9]").find();
        var good = prices[i].parent().parent();
        if (good.childCount() > count) {
            continue;
        }
        if (!add_cart) {
            //good.click();
            rect = prices[i].bounds();
            click(rect.centerX(), rect.centerY());
            rsleep(2);
            rslide(2);
            className("android.widget.ImageView").desc("返回").click();
        } else {
            good.child(3).click();
            rslide(1);
        }
        rsleep(2);
    }
    advback();
    rsleep(3);
}

说明

  • 修复了浏览商品函数失效的问题。
  • 支持了一个新的任务。
  • 稳定性应该提升不少,测试了两个号除了遇到了一次网络问题卡住之外没有其他问题。
  • 加了个返回的函数,应该不会出现跳到京东主页的情况了。
  • 还有一个浏览任务有待支持(但是没有浏览时间要求,手动完成也不麻烦)
  • 推荐使用方式是先打开活动页,然后运行脚本,切换回京东就能自动运行了。
  • 需要中断运行请按音量+
  • 当前已支持加购物车浏览商品任务。

脚本【旧版截图识色版】(仅存档)

点击展开

脚本

"auto";
toast('开始运行,请打开京东任务页')
images.requestScreenCapture()
ys = new Array(760, 1160, 1350, 1550, 1730)
x = 970
sleep(500)
on = -49108
off = -7570829
for (;;) {
    y = ison()
    if (y > 0) {
        click(x, y)
        sleep(500)
        for (i = 15; i; i--) {
            x1 = random(200, 800)
            y1 = random(1200, 1900)
            x2 = random(200, 800)
            y2 = random(1000, 1200)
            swipe(x1, y1, x2, y2, 300)
            sleep(1100)
        }
        back()
    }
    sleep(3000)
}
function ison() {
    j = ys.length
    img = images.captureScreen()
    for (i = 0; i < j; i++) {
        if (Math.abs(img.pixel(x, ys[i]) - on) < 50) {
            return (ys[i])
        }
    }
    return (0)
}

说明

  • 脚本的原理是每1秒截一次屏,判断(x,ys)的位置是不是红色,是的话会模拟浏览动作。
  • 浏览商品和加购物车任务只能手动完成,使用脚本会有问题。
  • 此脚本只适配了Mix2S,其他屏幕分辨率请自行修改坐标
    1. 开发者模式里打开指针位置就能知道点击位置的坐标了。
      任务页
    2. 如图,在每个按钮的右侧背景上取点(没必要很精确,注意避开按钮文字),坐标为(x,y1),(x,y2),(x,y3),……,记录x和y1,y2,y3,……的值,第一个分享按钮没必要记录。
    3. 脚本第5行x=960,把960改成你测得的x的值。
    4. 脚本第7行ys=new Array(950,1155,1350,1540,1715),把里面的数字改成y1,y2,y3,……的值,
      注意要用半角逗号分隔,不然会报错。

      例如你量出来有6个按钮,坐标为(980,950)(980,1150)(980,1350),(980,1530),(980,1710),(980,1890)
      修改后的脚本:
      第5行x=980
      第7行ys=new Array(950,1150,1350,1530, 1710,1890)

在我的手机上正常运行不代表能在所有设备上正常运行,如果遇到问题欢迎在下方留言。
可以的话请带上出问题时候的截图发到我的邮箱([email protected])里,感谢理解与支持。

最后修改:2020 年 05 月 29 日 09 : 31 AM