B2B网络软件

标题: 极速视频APP刷金币 [打印本页]

作者: YYPOST群发软件    时间: 1 小时前
标题: 极速视频APP刷金币
极速视频APP刷金币
极速视频APP刷金币 B2B网络软件
  1. // =============================================================================
  2. //  极速视频APP刷金币 - 极简稳定版(AIWROK / 无碍 + Agent双模式)
  3. //  支持:抖音极速版(com.ss.android.ugc.aweme.lite)
  4. //        快手极速版(com.kuaishou.nebula)
  5. //        今日头条极速版(com.ss.android.article.lite)
  6. //  原理:只做两个动作①每隔N秒下滑看下一个视频 ②定期点击宝箱/广告赚金币
  7. //        不做复杂XML识别 → 绝无乱点问题
  8. // =============================================================================

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

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

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

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

  29.     // ===== 三个APP的包名 + 宝箱位置百分比(通用1080P+分辨率都适用)=====
  30.     APP表: [
  31.         {
  32.             编号: 1, 名称: "抖音极速版",
  33.             包名: "com.ss.android.ugc.aweme.lite",
  34.             首页Tab坐标: [0.1, 0.96], // 底部"首页"位置
  35.             宝箱坐标:   [0.925, 0.81],// 右下"看视频/赚金币宝箱"悬浮位置
  36.             额外开红包坐标: [0.93, 0.93], // 右下"计时红包"
  37.             搜索框坐标: null          // 抖音不需要搜索入口
  38.         },
  39.         {
  40.             编号: 2, 名称: "快手极速版",
  41.             包名: "com.kuaishou.nebula",
  42.             首页Tab坐标: [0.1, 0.97],
  43.             宝箱坐标:   [0.95, 0.42], // 右边竖条"挂件/红包"
  44.             额外开红包坐标: [0.06, 0.42], // 左边红包圈
  45.             搜索框坐标: [0.88, 0.09]
  46.         },
  47.         {
  48.             编号: 3, 名称: "今日头条极速版",
  49.             包名: "com.ss.android.article.lite",
  50.             // ★头条极速版底部5Tab:首页(0.1)/视频(0.3)/开宝箱(0.55)/商城(0.7)/我的(0.9)
  51.             // 必须进"视频"Tab才是视频流,"首页"Tab是文章列表不能刷视频!
  52.             首页Tab坐标: [0.3, 0.9656],  // ★"视频"Tab(XML实测)
  53.             宝箱坐标:   [0.5, 0.9656],  // ★底部"开宝箱"Tab整块中心(XML实测 bounds中心)
  54.             额外开红包坐标: [0.08, 0.62], // ★左侧红包悬浮窗(截图里带黄色进度圈)
  55.             搜索框坐标: [0.52, 0.078]
  56.         }
  57.     ],

  58.     // ===== 模式 =====
  59.     优先使用Agent模式: true,
  60.     调试模式: true
  61. };

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

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

  78.         try {
  79.             if (this.mode === "agent") {
  80.                 var raw = "" + agent.shell("wm size");
  81.                 var m = raw.match(/(\d+)x(\d+)/);
  82.                 this.屏幕宽 = m ? parseInt(m[1]) : 1080;
  83.                 this.屏幕高 = m ? parseInt(m[2]) : 2400;
  84.             } else {
  85.                 this.屏幕宽 = screen.getScreenWidth();
  86.                 this.屏幕高 = screen.getScreenHeight();
  87.             }
  88.         } catch(e) { this.屏幕宽 = 1080; this.屏幕高 = 2400; }
  89.         print.log("✓ 屏幕尺寸:" + this.屏幕宽 + " × " + this.屏幕高);
  90.         return true;
  91.     },

  92.     _xy: function(px, py) { return [Math.floor(this.屏幕宽*px), Math.floor(this.屏幕高*py)]; },

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

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

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

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

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

  129.     openApp: function(pkg) {
  130.         try {
  131.             // 用 app.resetApp 启动(AIWROK原生API,最稳定)
  132.             app.resetApp(pkg);
  133.             print.log("✓ 启动APP:" + pkg);
  134.             sleep.second(秒 = 8);
  135.             return true;
  136.         } catch(e) {
  137.             print.log("⚠ app.resetApp 失败:"+e.message+",尝试 monkey 兜底...");
  138.             try {
  139.                 agent.shell("monkey -p " + pkg + " -c android.intent.category.LAUNCHER 1");
  140.                 sleep.second(秒 = 8);
  141.                 return true;
  142.             } catch(e2) { print.log("⚠ 启动完全失败:"+e2.message); return false; }
  143.         }
  144.     },

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

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

  153.     _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 "";} }
  154. };

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

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

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

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

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

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

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

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

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

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

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

  225.                 // 第5步:返回视频流
  226.                 print.log("  [返回] back×2 + 回视频Tab");
  227.                 agent.shell("input keyevent 4");
  228.                 sleep.second(秒 = 2);
  229.                 agent.shell("input keyevent 4");
  230.                 sleep.second(秒 = 2);
  231.                 auto.clickPercent(0.3, 0.9656);
  232.                 sleep.second(秒 = 2);
  233.                 Engine.关闭小弹窗();
  234.             } catch(e) {
  235.                 print.log("  [宝箱] 异常: " + e.message);
  236.                 try { agent.shell("input keyevent 4"); sleep.second(秒=2); } catch(e2) {}
  237.                 try { auto.clickPercent(0.3, 0.9656); } catch(e3) {}
  238.             }
  239.             上次点宝箱 = Date.now();
  240.         }

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

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

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

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

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

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

  299. main();
复制代码







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