YYPOST群发软件 发表于 7 小时前

快手极速版自动刷视频

快手极速版自动刷视频

// =============================================================================
//快手极速版自动刷视频(AIWROK 格式)
//    3. 增加 Engine 双模式(Agent / 无碍)自动切换
//    4. 增加防检测:随机时长 + 左侧滑动避开全屏按钮 + 统一弹窗处理
//    5. 严格 ES5 语法(var / function,无 let/const/arrow)
// =============================================================================

print.log("╔══════════════════════════════════════════╗");
print.log("║快手极速版自动刷视频║");
print.log("║随机时长 + 左侧滑动 + 弹窗自动关闭       ║");
print.log("╚══════════════════════════════════════════╝");
print.time();

// =============================================================================
//第一部分:配置(按需修改)
// =============================================================================
var CONFIG = {
    // ===== 核心参数 =====
    总刷视频次数: 100,            // 总共刷多少个视频(0=无限循环)
    最小停留秒: 8,                // 每个视频最少停留秒数
    最大停留秒: 18,               // 每个视频最多停留秒数
    滑动时长毫秒: 400,            // 滑动时长(模拟人手)
    滑动起点X比: 0.35,            // 滑动起点 X 百分比(左侧,避开中心全屏按钮)
    滑动起点Y比: 0.78,            // 滑动起点 Y 百分比
    滑动终点Y比: 0.22,            // 滑动终点 Y 百分比

    // ===== 启动参数 =====
    启动后等待秒: 6,            // App 启动后等待秒数
    操作间隔毫秒: 800,            // 点击之间冷却

    // ===== App 信息 =====
    App名称: "快手极速版",
    App包名: "com.kuaishou.nebula",

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

// =============================================================================
//第二部分:引擎(Agent / 无碍 双模式)
// =============================================================================
var Engine = {
    mode: "",
    屏幕宽: 1080,
    屏幕高: 2400,

    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;
    },

    // 随机整数 [min, max)
    randNum: function(minnum, maxnum) {
      return Math.floor(minnum + Math.random() * (maxnum - minnum));
    },

    // 视频翻页滑动(左侧滑动,避开中心全屏按钮)
    nextVideo: function() {
      try {
            auto.swipPercent_v2(
                CONFIG.滑动起点X比, CONFIG.滑动起点Y比,
                CONFIG.滑动起点X比, CONFIG.滑动终点Y比,
                CONFIG.滑动时长毫秒, 0
            );
      } catch(e) {
            // 兜底:用 agent.shell input swipe
            try {
                var x = Math.floor(this.屏幕宽 * CONFIG.滑动起点X比);
                var y1 = Math.floor(this.屏幕高 * CONFIG.滑动起点Y比);
                var y2 = Math.floor(this.屏幕高 * CONFIG.滑动终点Y比);
                agent.shell("input swipe " + x + " " + y1 + " " + x + " " + y2 + " " + CONFIG.滑动时长毫秒);
            } catch(e2) {
                print.log("⚠ 滑动失败: " + e2.message);
            }
      }
      sleep.millisecond(500);
    },

    // 点击百分比坐标
    clickPercent: function(px, py) {
      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.操作间隔毫秒);
    },

    // 返回键
    back: function() {
      try {
            if (this.mode === "agent") agent.shell("input keyevent 4");
            else auto.back();
      } catch(e) {}
      sleep.second(1);
    },

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

    // 启动 App(按包名)—— 用 app.resetApp(昨天验证可行的 AIWROK 原生 API)
    openApp: function(pkg, 名称) {
      print.log("→ 启动:" + 名称 + "(" + pkg + ")");
      try {
            app.resetApp(pkg);
            print.log("✓ 启动APP:" + pkg);
            sleep.second(CONFIG.启动后等待秒);
            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(CONFIG.启动后等待秒);
                return true;
            } catch(e2) {
                print.log("✗ 启动完全失败:" + e2.message);
                return false;
            }
      }
    },

    // 统一弹窗处理(关键词数组,借鉴 AutoX.js 风格)
    关闭弹窗: function() {
      var 弹窗词 = [
            "我知道了", "知道了", "暂不开启", "以后再说", "取消",
            "暂不更新", "下次再说", "拒绝", "不允许", "跳过", "关闭",
            "暂不领取", "稍后再说", "不再提示"
      ];
      try {
            var 命中 = auto.findText(弹窗词.join("||"));
            if (!命中) return false;

            var 节点集合 = auto.nodeSearch(1500);
            if (!节点集合) return false;

            for (var i = 0; i < 弹窗词.length; i++) {
                var 词 = 弹窗词;
                var 过滤 = 节点集合.text(词);
                if (过滤 && 过滤.count() > 0) {
                  var 节点 = 过滤.getNode(0);
                  if (节点) {
                        节点.click();
                        print.log("✓ 关弹窗:点击【" + 词 + "】");
                        sleep.second(1);
                        return true;
                  }
                }
            }
      } catch(e) {
            if (CONFIG.调试模式) print.log("- 弹窗检测异常: " + e.message);
      }
      return false;
    }
};

// =============================================================================
//第三部分:快手极速版模块
// =============================================================================
var kuaishou = {
    名称: CONFIG.App名称,
    包名: CONFIG.App包名,

    run: function(runTimes) {
      print.log("\n━━━━━ 快手极速版 开刷 ━━━━━");
      print.log("· 目标次数:" + (runTimes === 0 ? "无限循环" : runTimes));
      print.log("· 停留秒数:" + CONFIG.最小停留秒 + " - " + CONFIG.最大停留秒);

      // 1. 启动 App
      if (!Engine.openApp(this.包名, this.名称)) {
            print.log("✗ 启动失败,退出");
            return;
      }

      // 2. 启动后关弹窗
      Engine.关闭弹窗();

      // 3. 主循环
      var flagTime = 0;
      var 开始时间戳 = Date.now();

      while (runTimes === 0 || flagTime < runTimes) {
            flagTime++;
            var sleepSec = Engine.randNum(CONFIG.最小停留秒, CONFIG.最大停留秒);
            var 已过秒 = ((Date.now() - 开始时间戳) / 1000).toFixed(0);

            print.log("[快手 " + flagTime + (runTimes === 0 ? "" : "/" + runTimes) + "] 停留 " + sleepSec + "s | 累计 " + 已过秒 + "s");

            sleep.second(sleepSec);
            Engine.关闭弹窗();
            Engine.nextVideo();
      }

      // 4. 退出回桌面
      print.log("\n✓ 快手极速版任务完成,共刷 " + flagTime + " 个视频");
      Engine.home();
    }
};

// =============================================================================
//第四部分:启动入口
// =============================================================================
function main() {
    if (!Engine.init()) {
      print.log("✗ 引擎初始化失败,退出");
      return;
    }

    print.log("\n╔══════════ 开始刷快手 ══════════╗");
    print.log("· App:" + CONFIG.App名称);
    print.log("· 包名:" + CONFIG.App包名);
    print.log("· 总次数:" + (CONFIG.总刷视频次数 === 0 ? "无限循环" : CONFIG.总刷视频次数));

    // 先回桌面
    Engine.home();
    sleep.second(2);

    // 跑快手
    try {
      kuaishou.run(CONFIG.总刷视频次数);
    } catch(e) {
      print.log("⚠ 快手异常: " + e.message);
    }

    print.log("\n╔══════════ 全部完成 ══════════╗");
    Engine.home();
}

// 启动
main();

页: [1]
查看完整版本: 快手极速版自动刷视频