YYPOST群发软件 发表于 昨天 06:49

极速视频APP刷金币

极速视频APP刷金币

// =============================================================================
//极速视频APP刷金币 - 极简稳定版(AIWROK / 无碍 + Agent双模式)
//支持:抖音极速版(com.ss.android.ugc.aweme.lite)
//      快手极速版(com.kuaishou.nebula)
//      今日头条极速版(com.ss.android.article.lite)
//原理:只做两个动作①每隔N秒下滑看下一个视频 ②定期点击宝箱/广告赚金币
//      不做复杂XML识别 → 绝无乱点问题
// =============================================================================

print.log("╔══════════════════════════════════════════╗");
print.log("║极速视频刷金币 - 极简稳定版            ║");
print.log("║只做:滑屏 + 点宝箱   不会乱点!         ║");
print.log("╚══════════════════════════════════════════╝");
print.time();

// =============================================================================
//第一部分:配置(按你手机分辨率/习惯改这里)
// =============================================================================
var CONFIG = {
    // ===== 选择你要刷的APP:1=抖音极速版2=快手极速版3=今日头条极速版 =====
    目标APP编号: 3,

    // ===== 核心参数 =====
    总运行分钟: 30,         // 总共跑多久(分钟,到点自动退出)
    每个视频秒数: 18,         // 每个视频停留秒数(15-20秒比较稳,不会被检测秒划)
    滑动起点: ,    // 滑动起点百分比(屏幕中下方往上滑)
    滑动终点: ,    // 滑动终点百分比
    滑动时长毫秒: 620,      // 滑动时长(模拟人手,不要太快)

    宝箱点击分钟间隔: 2,      // 每几分钟去点一次宝箱Tab(头条=底部"任务"Tab)
    悬浮红包点击视频间隔: 3,// 每刷几个视频点一次悬浮红包(头条=左侧带黄圈的红包)
    操作间隔毫秒: 900,      // 两次点击之间冷却

    // ===== 三个APP的包名 + 宝箱位置百分比(通用1080P+分辨率都适用)=====
    APP表: [
      {
            编号: 1, 名称: "抖音极速版",
            包名: "com.ss.android.ugc.aweme.lite",
            首页Tab坐标: , // 底部"首页"位置
            宝箱坐标:   ,// 右下"看视频/赚金币宝箱"悬浮位置
            额外开红包坐标: , // 右下"计时红包"
            搜索框坐标: null          // 抖音不需要搜索入口
      },
      {
            编号: 2, 名称: "快手极速版",
            包名: "com.kuaishou.nebula",
            首页Tab坐标: ,
            宝箱坐标:   , // 右边竖条"挂件/红包"
            额外开红包坐标: , // 左边红包圈
            搜索框坐标:
      },
      {
            编号: 3, 名称: "今日头条极速版",
            包名: "com.ss.android.article.lite",
            // ★头条极速版底部5Tab:首页(0.1)/视频(0.3)/开宝箱(0.55)/商城(0.7)/我的(0.9)
            // 必须进"视频"Tab才是视频流,"首页"Tab是文章列表不能刷视频!
            首页Tab坐标: ,// ★"视频"Tab(XML实测)
            宝箱坐标:   ,// ★底部"开宝箱"Tab整块中心(XML实测 bounds中心)
            额外开红包坐标: , // ★左侧红包悬浮窗(截图里带黄色进度圈)
            搜索框坐标:
      }
    ],

    // ===== 模式 =====
    优先使用Agent模式: true,
    调试模式: true
};

// =============================================================================
//第二部分:极简操作引擎(Agent模式 / 无碍模式 自动切换)
// =============================================================================
var Engine = {
    mode: "",
    屏幕宽: 0,
    屏幕高: 0,

    init: function() {
      print.log("\n【引擎初始化】检测模式...");
      if (CONFIG.优先使用Agent模式) {
            try { if (agent.isOpen()) { this.mode = "agent"; print.log("✓ Agent代理模式"); } } catch(e) {}
      }
      if (this.mode === "") {
            try { if (typeof auto !== 'undefined') { this.mode = "auto"; print.log("✓ 无碍(Accessibility)模式"); } } catch(e) {}
      }
      if (this.mode === "") { print.log("✗ 两个模式都不可用!开启Agent或无障碍后再跑"); return false; }

      try {
            if (this.mode === "agent") {
                var raw = "" + agent.shell("wm size");
                var m = raw.match(/(\d+)x(\d+)/);
                this.屏幕宽 = m ? parseInt(m) : 1080;
                this.屏幕高 = m ? parseInt(m) : 2400;
            } else {
                this.屏幕宽 = screen.getScreenWidth();
                this.屏幕高 = screen.getScreenHeight();
            }
      } catch(e) { this.屏幕宽 = 1080; this.屏幕高 = 2400; }
      print.log("✓ 屏幕尺寸:" + this.屏幕宽 + " × " + this.屏幕高);
      return true;
    },

    _xy: function(px, py) { return ; },

    click: function(px, py) {
      // 用 auto.clickPercent(百分比坐标点击,和 swipPercent_v2 配套)
      try {
            auto.clickPercent(px, py);
      } catch(e) {
            try { agent.shell("input tap " + Math.floor(this.屏幕宽*px) + " " + Math.floor(this.屏幕高*py)); } catch(e2) {}
      }
      sleep.millisecond(毫秒 = CONFIG.操作间隔毫秒);
      return true;
    },

    // 通过XML找Tab并点击(已禁用,用坐标替代)
    clickTabByName: function(名称) {
      return false;
    },

    swipe: function() {
      // 关键:从左侧滑,避开中心的"全屏播放"按钮
      // 全屏按钮 centerPercent="",范围 x=
      // 所以滑动 x 取 0.35(左侧,避开全屏按钮区域)
      // y: 0.85 → 0.10(覆盖75%屏高,确保翻页)
      // duration=300ms(快速滑,不被识别成点击)
      // stay=0ms(不做停留,避免被识别为tap)
      try {
            auto.swipPercent_v2(0.35, 0.85, 0.35, 0.10, 300, 0);
      } catch(e) {
            print.log("⚠ swipPercent_v2 异常: " + e.message);
      }
      sleep.millisecond(毫秒 = 500);
    },

    back: function() {
      try { if (this.mode==="agent") agent.shell("input keyevent 4"); else auto.back(); } catch(e) {}
      sleep.millisecond(毫秒=700);
    },

    home: function() {
      try { if (this.mode==="agent") agent.shell("input keyevent 3"); else auto.home(); } catch(e) {}
      sleep.second(秒=1);
    },

    openApp: function(pkg) {
      try {
            // 用 app.resetApp 启动(AIWROK原生API,最稳定)
            app.resetApp(pkg);
            print.log("✓ 启动APP:" + pkg);
            sleep.second(秒 = 8);
            return true;
      } catch(e) {
            print.log("⚠ app.resetApp 失败:"+e.message+",尝试 monkey 兜底...");
            try {
                agent.shell("monkey -p " + pkg + " -c android.intent.category.LAUNCHER 1");
                sleep.second(秒 = 8);
                return true;
            } catch(e2) { print.log("⚠ 启动完全失败:"+e2.message); return false; }
      }
    },

    // 弹窗处理:禁用(在视频页盲点会点到点赞/分享/评论按钮,造成乱点)
    关闭小弹窗: function() {
      return 0;
    },

    // 无dump版找字:直接返回false(禁用,防止卡死)
    findAndClickText: function(关键词) {
      return false;
    },

    _cat: function(f) { try { var r = ""+agent.shell("cat "+f); var i=r.indexOf("successMsg:"); if (i!==-1){var a=r.substring(i+11);var j=a.indexOf(",errorMsg:"); if (j!==-1)a=a.substring(0,j); return a.trim();} return r;} catch(e){return "";} }
};

// =============================================================================
//第三部分:主流程(极简,两个动作循环)
// =============================================================================
function main() {
    if (!Engine.init()) return;

    var APP = CONFIG.APP表;
    if (!APP) { print.log("✗ 目标APP编号不对,只能是 1/2/3"); return; }
    print.log("\n▶▶▶ 目标:" + APP.名称 + "(包名 " + APP.包名 + ")");
    print.log("▶▶▶ 总时长:" + CONFIG.总运行分钟 + " 分钟 / 每个视频停留 " + CONFIG.每个视频秒数 + " 秒");

    // ========== 1. 启动APP ==========
    print.log("[步骤1] 启动APP...");
    Engine.openApp(APP.包名);
    sleep.second(秒 = 10);
    Engine.关闭小弹窗();

    // ========== 2. 切换到视频Tab(直接坐标,无dump)==========
    print.log("[步骤2] 切换到视频Tab...");
   
    // 直接用坐标点视频Tab (0.3, 0.9656)
    auto.clickPercent(0.3, 0.9656);
    sleep.second(秒 = 3);
    Engine.关闭小弹窗();
   
    // 强制再切一次(确保切成功)
    auto.clickPercent(0.3, 0.9656);
    sleep.second(秒 = 2);
    Engine.关闭小弹窗();
   
    print.log("✓ 已进入视频Tab");

    // ========== 3. 主循环 ==========
    var 开始时间戳 = Date.now();
    var 最大毫秒 = CONFIG.总运行分钟 * 60 * 1000;
    // 第一次 30 秒就点宝箱(立刻就动起来)
    var 上次点宝箱 = 开始时间戳 - (CONFIG.宝箱点击分钟间隔 * 60 * 1000 - 30 * 1000);
    var 上次点悬浮红包 = 开始时间戳;
    var 视频数 = 0;
    var 宝箱次数 = 0;
    var 红包次数 = 0;

    print.log("\n╔══════════ 开始刷视频 ══════════╗");
    print.log("· 宝箱间隔 " + CONFIG.宝箱点击分钟间隔 + " 分钟,第1次30秒触发");
    if (APP.额外开红包坐标) {
      print.log("· 每 " + CONFIG.悬浮红包点击视频间隔 + " 个视频点一次悬浮红包");
    }

    while ((Date.now() - 开始时间戳) < 最大毫秒) {
      var 已过分钟 = ((Date.now() - 开始时间戳) / 60000).toFixed(1);
      var 剩余分钟 = (CONFIG.总运行分钟 - 已过分钟).toFixed(1);

      // ---- A. 每隔宝箱分钟间隔 → 去点宝箱 ----
      var 距上次宝箱Ms = Date.now() - 上次点宝箱;
      if (距上次宝箱Ms >= CONFIG.宝箱点击分钟间隔 * 60 * 1000) {
            宝箱次数++;
            print.log("\n[" + 已过分钟 + "m] &#128273; 第" + 宝箱次数 + "次开宝箱");
            
            try {
                // 第1步:点底部"开宝箱/任务"Tab
                print.log("[宝箱] 1. 点底部Tab (0.5,0.9656)");
                auto.clickPercent(0.5, 0.9656);
                sleep.second(秒 = 3);

                // 第2步:点"看视频赚钱"卡片(XML centerPercent=)
                print.log("[宝箱] 2. 点'看视频赚钱' (0.157,0.299)");
                auto.clickPercent(0.157, 0.299);
                sleep.second(秒 = 5);

                // 第3步:进入看视频赚钱子页,点中央大按钮
                print.log("[宝箱] 3. 点看视频按钮 (0.5,0.6)");
                auto.clickPercent(0.5, 0.6);
                sleep.second(秒 = 3);

                // 第4步:等广告25秒
                print.log("    等待25秒(广告播放中)...");
                for (var ad=0; ad<5; ad++) {
                  sleep.second(秒 = 5);
                  Engine.关闭小弹窗();
                }

                // 第5步:返回视频流
                print.log("[返回] back×2 + 回视频Tab");
                agent.shell("input keyevent 4");
                sleep.second(秒 = 2);
                agent.shell("input keyevent 4");
                sleep.second(秒 = 2);
                auto.clickPercent(0.3, 0.9656);
                sleep.second(秒 = 2);
                Engine.关闭小弹窗();
            } catch(e) {
                print.log("[宝箱] 异常: " + e.message);
                try { agent.shell("input keyevent 4"); sleep.second(秒=2); } catch(e2) {}
                try { auto.clickPercent(0.3, 0.9656); } catch(e3) {}
            }
            上次点宝箱 = Date.now();
      }

      // ---- A2. 每N个视频点一次悬浮红包 ----
      if (APP.额外开红包坐标 && 视频数 > 0 && (视频数 % CONFIG.悬浮红包点击视频间隔) === 0) {
            红包次数++;
            print.log("\n&#128176; 悬浮红包 第" + 红包次数 + "次");
            try {
                auto.clickPercent(APP.额外开红包坐标, APP.额外开红包坐标);
                sleep.second(秒 = 3);
                // 点领取按钮(屏幕中心偏下)
                auto.clickPercent(0.5, 0.55);
                sleep.second(秒 = 3);
                // 等20秒
                print.log("    等待20秒...");
                for (var hw=0; hw<4; hw++) { sleep.second(秒=5); Engine.关闭小弹窗(); }
                agent.shell("input keyevent 4");
                sleep.second(秒 = 2);
            } catch(e) {
                print.log("    [悬浮红包] 异常: " + e.message);
                try { agent.shell("input keyevent 4"); } catch(e2) {}
            }
      }

      // ---- B. 倒计时看当前视频 + 每20秒清一次弹窗 ----
      var 剩 = CONFIG.每个视频秒数;
      while (剩 > 0) {
            sleep.second(秒 = 5);
            剩 -= 5;
            if (剩 === 10 || 剩 === 5) {
                var n = Engine.关闭小弹窗();
                if (n > 0) print.log("    [观看中] 清掉 " + n + " 个弹窗");
            }
      }

      // ---- C. 滑到下一个 ----
      视频数++;
      if ((视频数 % 5) === 1 || CONFIG.调试模式) {
            print.log("▶ 第 " + 视频数 + " 个视频(已过 " + 已过分钟 + "m,剩 " + 剩余分钟 + "m,宝箱 " + 宝箱次数 + " 次)");
      }
      
      var 滑OK = Engine.swipe();
      sleep.millisecond(毫秒=1500);
      
      // 每20个视频回视频Tab兜底
      if ((视频数 % 20) === 0) {
            auto.clickPercent(0.3, 0.9656);
            sleep.second(秒=1);
      }

      // 每10个视频关掉一次弹窗
      if ((视频数 % 10) === 0) {
            Engine.关闭小弹窗();
      }
    }

    print.log("\n╔══════════ 刷视频结束 ══════════╗");
    print.log("║共刷视频:" + 视频数 + " 个");
    print.log("║点宝箱次数:" + 宝箱次数 + " 次");
    print.log("║运行时长:" + CONFIG.总运行分钟 + " 分钟");
    print.log("╚══════════════════════════════════╝");

    Engine.home();
    print.timeEnd();
    print.log("\n✓ 脚本完成!明天再来~");
}

main();


页: [1]
查看完整版本: 极速视频APP刷金币