B2B网络软件

标题: 快手极速版自动刷视频 [打印本页]

作者: YYPOST群发软件    时间: 6 小时前
标题: 快手极速版自动刷视频
快手极速版自动刷视频
快手极速版自动刷视频 B2B网络软件
  1. // =============================================================================
  2. //  快手极速版自动刷视频(AIWROK 格式)
  3. //    3. 增加 Engine 双模式(Agent / 无碍)自动切换
  4. //    4. 增加防检测:随机时长 + 左侧滑动避开全屏按钮 + 统一弹窗处理
  5. //    5. 严格 ES5 语法(var / function,无 let/const/arrow)
  6. // =============================================================================

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

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

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

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

  30.     // ===== 模式 =====
  31.     优先使用Agent模式: true,
  32.     调试模式: true
  33. };

  34. // =============================================================================
  35. //  第二部分:引擎(Agent / 无碍 双模式)
  36. // =============================================================================
  37. var Engine = {
  38.     mode: "",
  39.     屏幕宽: 1080,
  40.     屏幕高: 2400,

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

  53.         // 获取屏幕尺寸
  54.         try {
  55.             if (this.mode === "agent") {
  56.                 var raw = "" + agent.shell("wm size");
  57.                 var m = raw.match(/(\d+)x(\d+)/);
  58.                 this.屏幕宽 = m ? parseInt(m[1]) : 1080;
  59.                 this.屏幕高 = m ? parseInt(m[2]) : 2400;
  60.             } else {
  61.                 this.屏幕宽 = screen.getScreenWidth();
  62.                 this.屏幕高 = screen.getScreenHeight();
  63.             }
  64.         } catch(e) {
  65.             this.屏幕宽 = 1080;
  66.             this.屏幕高 = 2400;
  67.         }
  68.         print.log("✓ 屏幕尺寸:" + this.屏幕宽 + " × " + this.屏幕高);
  69.         return true;
  70.     },

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

  75.     // 视频翻页滑动(左侧滑动,避开中心全屏按钮)
  76.     nextVideo: function() {
  77.         try {
  78.             auto.swipPercent_v2(
  79.                 CONFIG.滑动起点X比, CONFIG.滑动起点Y比,
  80.                 CONFIG.滑动起点X比, CONFIG.滑动终点Y比,
  81.                 CONFIG.滑动时长毫秒, 0
  82.             );
  83.         } catch(e) {
  84.             // 兜底:用 agent.shell input swipe
  85.             try {
  86.                 var x = Math.floor(this.屏幕宽 * CONFIG.滑动起点X比);
  87.                 var y1 = Math.floor(this.屏幕高 * CONFIG.滑动起点Y比);
  88.                 var y2 = Math.floor(this.屏幕高 * CONFIG.滑动终点Y比);
  89.                 agent.shell("input swipe " + x + " " + y1 + " " + x + " " + y2 + " " + CONFIG.滑动时长毫秒);
  90.             } catch(e2) {
  91.                 print.log("  ⚠ 滑动失败: " + e2.message);
  92.             }
  93.         }
  94.         sleep.millisecond(500);
  95.     },

  96.     // 点击百分比坐标
  97.     clickPercent: function(px, py) {
  98.         try {
  99.             auto.clickPercent(px, py);
  100.         } catch(e) {
  101.             try {
  102.                 agent.shell("input tap " + Math.floor(this.屏幕宽 * px) + " " + Math.floor(this.屏幕高 * py));
  103.             } catch(e2) {}
  104.         }
  105.         sleep.millisecond(CONFIG.操作间隔毫秒);
  106.     },

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

  115.     // Home键
  116.     home: function() {
  117.         try {
  118.             if (this.mode === "agent") agent.shell("input keyevent 3");
  119.             else auto.home();
  120.         } catch(e) {}
  121.         sleep.second(2);
  122.     },

  123.     // 启动 App(按包名)—— 用 app.resetApp(昨天验证可行的 AIWROK 原生 API)
  124.     openApp: function(pkg, 名称) {
  125.         print.log("  → 启动:" + 名称 + "(" + pkg + ")");
  126.         try {
  127.             app.resetApp(pkg);
  128.             print.log("✓ 启动APP:" + pkg);
  129.             sleep.second(CONFIG.启动后等待秒);
  130.             return true;
  131.         } catch(e) {
  132.             print.log("  ⚠ app.resetApp 失败:" + e.message + ",尝试 monkey 兜底");
  133.             try {
  134.                 agent.shell("monkey -p " + pkg + " -c android.intent.category.LAUNCHER 1");
  135.                 sleep.second(CONFIG.启动后等待秒);
  136.                 return true;
  137.             } catch(e2) {
  138.                 print.log("  ✗ 启动完全失败:" + e2.message);
  139.                 return false;
  140.             }
  141.         }
  142.     },

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

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

  155.             for (var i = 0; i < 弹窗词.length; i++) {
  156.                 var 词 = 弹窗词[i];
  157.                 var 过滤 = 节点集合.text(词);
  158.                 if (过滤 && 过滤.count() > 0) {
  159.                     var 节点 = 过滤.getNode(0);
  160.                     if (节点) {
  161.                         节点.click();
  162.                         print.log("  ✓ 关弹窗:点击【" + 词 + "】");
  163.                         sleep.second(1);
  164.                         return true;
  165.                     }
  166.                 }
  167.             }
  168.         } catch(e) {
  169.             if (CONFIG.调试模式) print.log("  - 弹窗检测异常: " + e.message);
  170.         }
  171.         return false;
  172.     }
  173. };

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

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

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

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

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

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

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

  199.             sleep.second(sleepSec);
  200.             Engine.关闭弹窗();
  201.             Engine.nextVideo();
  202.         }

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

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

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

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

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

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

  232. // 启动
  233. main();
复制代码






欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2