 | |  |  | 极速视频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秒比较稳,不会被检测秒划)
- 滑动起点: [0.5, 0.78], // 滑动起点百分比(屏幕中下方往上滑)
- 滑动终点: [0.5, 0.32], // 滑动终点百分比
- 滑动时长毫秒: 620, // 滑动时长(模拟人手,不要太快)
- 宝箱点击分钟间隔: 2, // 每几分钟去点一次宝箱Tab(头条=底部"任务"Tab)
- 悬浮红包点击视频间隔: 3, // 每刷几个视频点一次悬浮红包(头条=左侧带黄圈的红包)
- 操作间隔毫秒: 900, // 两次点击之间冷却
- // ===== 三个APP的包名 + 宝箱位置百分比(通用1080P+分辨率都适用)=====
- APP表: [
- {
- 编号: 1, 名称: "抖音极速版",
- 包名: "com.ss.android.ugc.aweme.lite",
- 首页Tab坐标: [0.1, 0.96], // 底部"首页"位置
- 宝箱坐标: [0.925, 0.81],// 右下"看视频/赚金币宝箱"悬浮位置
- 额外开红包坐标: [0.93, 0.93], // 右下"计时红包"
- 搜索框坐标: null // 抖音不需要搜索入口
- },
- {
- 编号: 2, 名称: "快手极速版",
- 包名: "com.kuaishou.nebula",
- 首页Tab坐标: [0.1, 0.97],
- 宝箱坐标: [0.95, 0.42], // 右边竖条"挂件/红包"
- 额外开红包坐标: [0.06, 0.42], // 左边红包圈
- 搜索框坐标: [0.88, 0.09]
- },
- {
- 编号: 3, 名称: "今日头条极速版",
- 包名: "com.ss.android.article.lite",
- // ★头条极速版底部5Tab:首页(0.1)/视频(0.3)/开宝箱(0.55)/商城(0.7)/我的(0.9)
- // 必须进"视频"Tab才是视频流,"首页"Tab是文章列表不能刷视频!
- 首页Tab坐标: [0.3, 0.9656], // ★"视频"Tab(XML实测)
- 宝箱坐标: [0.5, 0.9656], // ★底部"开宝箱"Tab整块中心(XML实测 bounds中心)
- 额外开红包坐标: [0.08, 0.62], // ★左侧红包悬浮窗(截图里带黄色进度圈)
- 搜索框坐标: [0.52, 0.078]
- }
- ],
- // ===== 模式 =====
- 优先使用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[1]) : 1080;
- this.屏幕高 = m ? parseInt(m[2]) : 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 [Math.floor(this.屏幕宽*px), Math.floor(this.屏幕高*py)]; },
- 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="[0.5,0.6438]",范围 x=[0.3861,0.6139]
- // 所以滑动 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表[CONFIG.目标APP编号 - 1];
- 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] 🔑 第" + 宝箱次数 + "次开宝箱");
-
- try {
- // 第1步:点底部"开宝箱/任务"Tab
- print.log(" [宝箱] 1. 点底部Tab (0.5,0.9656)");
- auto.clickPercent(0.5, 0.9656);
- sleep.second(秒 = 3);
- // 第2步:点"看视频赚钱"卡片(XML centerPercent=[0.1569,0.2992])
- 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 💰 悬浮红包 第" + 红包次数 + "次");
- try {
- auto.clickPercent(APP.额外开红包坐标[0], APP.额外开红包坐标[1]);
- 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();
复制代码
| |  | |  |
|