吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4668|回复: 15
收起左侧

[Java 原创] 【JavaScript】(基于autoJs)某宝集字清空购物车活动 自动浏览脚本源码

[复制链接]
呆恶龙 发表于 2020-1-26 17:14
本帖最后由 呆恶龙 于 2020-1-26 17:17 编辑

第一次发帖,版规看了好几遍。如还有违规...那我可能是个傻子

这些天全城警戒,一直在家呆着无聊,就把autoJs的文档看了一遍。正好赶上某宝的集字活动,虽说任务需要时间不长,想着在家闲着也是闲着,不如写个脚本练练手。于是就写了这么个东西,和大家一起学习,大神轻喷。
附上autoJs项目地址:https://github.com/hyb1996/Auto.js

功能简介

很简陋,就只有做浏览15s任务的功能,做完后会弹窗提示,最后一个任务需要手动完成。毕竟只是个短期活动,就不做得太完备了,如果有兴趣可以自己把剩下的功能加上。
Screenshot_20200126_163325_com.taobao.taobao.png
Screenshot_20200126_150501.jpg

脚本说明

  1. 怎么用应该不用细说了,论坛里很多大佬都讲得很详细。简单说就是把整个项目文件夹放到手机根目录下的脚本文件夹里,运行main.js即可。
    Screenshot_20200126_150546.jpg
  2. 我在脚本开头加入了自动打开某宝并返回主页的功能,因此在大部分情况下启动脚本都可以正常运行。
  3. 如果某宝启动设置了指纹密码,很可能会导致脚本出错。所以最好还是在某宝主页运行脚本
  4. 测试手机分辨率为720*1280(为了省电所以调低了),不是一般的1080*1920。脚本中加入了根据分辨率自动缩放坐标的函数,点击位置应该不会有差错。但是用于识别的图片可能需要重新截取

    识别用图片

    识别用图片

源码如下

auto();
requestScreenCapture();
setScreenMetrics(720,1280);

//载入需要识别的图片
function load(img){
    var t = images.read("./res/" + img + ".png");
    if(t == null){
        toast(img + " not found");
        exit();
    }
    return t;
}
var rocket = load("rocket");
var my1 = load("my1");
var my2 = load("my2");
var entrance = load("entrance");
var end = load("end");
var take = load("take");

launchApp("手机淘宝");   
//回到淘宝主界面
do{
    var m1 = findImage(captureScreen(),my1);
    var m2 = findImage(captureScreen(),my2);
    if(m1 || m2){
        break;
    }
    back();
    sleep(2000);
}while(1)
//通过左下角点击小火箭返回到顶部
var p1 = findImage(captureScreen(),rocket);
while(!p1){
    while(!click(75,1230));
    sleep(1000);
    p1 = findImage(captureScreen(),rocket);
}
while(!click(p1.x+ 50,p1.y + 50));
sleep(1000);

//下滑到入口位置
swipe(360,1150,360,150,1000);
sleep(1000);
var p2 = findImage(captureScreen(),entrance);
while(!click(p2.x + 50,p2.y + 50));
sleep(1000);

while(!click("获取更多"));
sleep(1000);
//打卡任务
if (click("去打卡")){
    sleep(1000);
    var p3 = findImage(captureScreen(),take);
    while(!p3) {
        p3 = findImage(captureScreen(),take)
    }
    click(p3.x + 10,p3.y + 10);
}
//浏览任务
while(click("去完成",0)){
    sleep(1000);
    while(1){
        if(textContains("完成").exists() || descContains("完成").exists()){
            toast("任务完成,返回");
            back();
            sleep(1000);
            break;
        }
        var p4=findImage(captureScreen(),end);
        if(p4){
           alert("浏览任务已完成,\n请手动完成抽礼盒任务!");
           exit();
        }
        if(textContains("纽扣").exists()){
            alert("浏览任务已完成,\n请手动完成纽扣兑换任务!");
            exit();
        }
    }
 }

 sleep(1000);
 if (click("去看看")){
     alert("浏览任务已完成,\n请手动完成换装任务!");
     exit();
}

项目压缩包下载地址:https://www.lanzouj.com/i8vbc2j

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dbvw9999 发表于 2020-3-3 17:16
呆恶龙 发表于 2020-2-26 19:21
[md]#### 比较简单的做法:
```javascript
auto();

希望请教下,单独用计时器的脚本是正常的,但是只要跟 "循环"  搭配起来,计时器就不工作了,一直是0:0:0,应该如何改进呢?



    var w = floaty.window(
        //悬浮窗初始化
        <frame gravity="center">
            <text id="text">脚本已运行:0:0:0</text>
        </frame>
    );
    //悬浮窗位置
    w.setPosition(0,0);
   
    var s = 0;
    var sec = 0;
    var min = 0;
    var hour = 0;
    setInterval(function(){
        s++;//每秒+1
        sec = s % 60;//秒
        min = Math.floor((s / 60) % 60);//分
        hour = Math.floor((s / 3600));//时
        ui.run(function(){
            w.text.setText("脚本已运行:" + hour + ":" + min + ":" + sec);
        });
    },1000);


//下滑
for (var i = 0; i <5; i++) {
   swipe(500, 1800, 500, 1200, 30);
   sleep(2000);
}
 楼主| 呆恶龙 发表于 2020-3-7 08:48
dbvw9999 发表于 2020-3-5 17:29
好像也不行唉,分2个线程,计时器停在   00:00:01
实在不行就算了

只要把计时功能写到线程里就可以了
[JavaScript] 纯文本查看 复制代码
auto();
var w = floaty.window(
    <frame gravity="center">
        <text id="text">脚本已运行:0:0:0</text>
    </frame>
);
w.setPosition(0,0);
var s = 0;
var sec = 0;
var min = 0;
var hour = 0;
threads.start(function(){
    setInterval(function(){
        s++;
        sec = s % 60;
        min = Math.floor((s / 60) % 60);
        hour = Math.floor((s / 3600));
        ui.run(function(){
           w.text.setText("脚本已运行:" + hour + ":" + min + ":" + sec); 
        });
    },1000);
})
//下滑
for (var i = 0; i <5; i++) {
    swipe(500, 1800, 500, 1200, 30); 
    sleep(2000);
 }
wyx50cn 发表于 2020-1-27 15:25
angel_5173 发表于 2020-1-27 19:29
能抽中才是王道
 楼主| 呆恶龙 发表于 2020-1-28 10:36

非酋表示完全不抱希望
dbvw9999 发表于 2020-2-24 14:24
本帖最后由 dbvw9999 于 2020-2-24 14:26 编辑

斯。。。斯国一 学习了

请教一下,如何 用悬浮窗口  “显示 脚本已经运行的时间
 楼主| 呆恶龙 发表于 2020-2-26 19:21
dbvw9999 发表于 2020-2-24 14:24
斯。。。斯国一 学习了

请教一下,如何 用悬浮窗口  “显示 脚本已经运行的时间”
比较简单的做法:
auto();
var w = floaty.window(
    //悬浮窗初始化
    <frame gravity="center">
        <text id="text">脚本已运行:0:0:0</text>
    </frame>
);
//悬浮窗位置
w.setPosition(0,0);

var s = 0;
var sec = 0;
var min = 0;
var hour = 0;
setInterval(function(){
    s++;//每秒+1
    sec = s % 60;//秒
    min = Math.floor((s / 60) % 60);//分
    hour = Math.floor((s / 3600));//时
    ui.run(function(){
        w.text.setText("脚本已运行:" + hour + ":" + min + ":" + sec); 
    });
},1000);
Auto.js关于悬浮窗的文档:https://hyb1996.github.io/AutoJs-Docs/#/floaty
小花啊 发表于 2020-2-26 20:14
表示厉害 慢慢学
dbvw9999 发表于 2020-2-28 11:41
呆恶龙 发表于 2020-2-26 19:21
[md]#### 比较简单的做法:
```javascript
auto();

谢谢亲的帮助,截图又有收获了,很开心
 楼主| 呆恶龙 发表于 2020-3-4 12:57
dbvw9999 发表于 2020-3-3 17:16
希望请教下,单独用计时器的脚本是正常的,但是只要跟 "循环"  搭配起来,计时器就不工作了,一直是0:0:0 ...

你得把计时功能单独写在一个线程里
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 02:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表