├── .gitignore ├── Autojs微信跳一跳说明.pdf ├── README.md ├── 微信红包监测.js └── 微信跳一跳.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /Autojs微信跳一跳说明.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Honlan/AutojsScripts/8a0ddbf18e3f793f6180ee03a829fc9d5964b84c/Autojs微信跳一跳说明.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AutojsScripts 2 | 3 | 个人兴趣,写的一些[Auto.js](https://github.com/hyb1996/Auto.js)脚本 4 | 5 | `Auto.js`的使用方法请参考`微信跳一跳`这个例子 6 | 7 | - `微信跳一跳.js`:自动玩微信跳一跳,参考`Autojs微信跳一跳说明.pdf`,了解详细使用流程 8 | - `微信红包监测.js`:自动监测微信,发现有新消息则进入,发现红包则点击 9 | 10 | -------------------------------------------------------------------------------- /微信红包监测.js: -------------------------------------------------------------------------------- 1 | console.show(); 2 | 3 | // 设备信息 4 | var WIDTH = device.width, 5 | HEIGHT = device.height, 6 | TYPE = device.brand + ' ' + device.model; 7 | device.keepScreenOn(); 8 | log('欢迎使用微信红包辅助'); 9 | console.setSize(parseInt(WIDTH * 0.58), parseInt(WIDTH * 0.7)); 10 | console.setPosition(parseInt(WIDTH * 0.36), 0); 11 | 12 | // 获取截图权限 13 | if (!requestScreenCapture()) { 14 | toast('请求截图失败,程序结束'); 15 | exit(); 16 | } 17 | 18 | // 启动微信 19 | launchApp('微信'); 20 | sleep(1000); 21 | 22 | var check = false; // 是否检测过布局 23 | var lineHeight; // 每行消息的高度 24 | var redX = 0; // 消息红点X坐标 25 | var startX; // 每行消息开始的X坐标 26 | var startY; // 第一行消息开始的Y坐标 27 | var white = 255; // 消息行背景色 28 | var gray = 153; // 文字的颜色 29 | var totalCount = 0; // 总共获取的红包数量 30 | var loopCount = 0; // 已循环的次数 31 | 32 | do { 33 | // 获取截图 34 | var img = captureScreen(); 35 | 36 | // 检测布局 37 | if (!check) { 38 | log('===== 检测布局中 ====='); 39 | // 寻找有像素的X起点 40 | var sx = 0; 41 | for (let c = 0; c < WIDTH; c++) { 42 | if (colors.red(images.pixel(img, c, parseInt(HEIGHT * 0.4))) > 0 && colors.red(images.pixel(img, c, parseInt(HEIGHT * 0.6))) > 0) { 43 | sx = c; 44 | break; 45 | } 46 | } 47 | // 寻找startY 48 | for (let r = 0; r < HEIGHT; r++) { 49 | var point = images.pixel(img, sx, r); 50 | var red = colors.red(point), 51 | green = colors.green(point), 52 | blue = colors.blue(point); 53 | if (Math.abs(red - white) + Math.abs(green - white) + Math.abs(blue - white) <= 15) { 54 | // 找到startY 55 | startY = r; 56 | log('第一行起始Y坐标', startY); 57 | break; 58 | } 59 | } 60 | // 寻找lineHeight 61 | var jump = false; 62 | for (let r = startY; r < HEIGHT; r++) { 63 | var point = images.pixel(img, sx, r); 64 | var red = colors.red(point), 65 | green = colors.green(point), 66 | blue = colors.blue(point); 67 | if (Math.abs(red - white) + Math.abs(green - white) + Math.abs(blue - white) > 60) { 68 | jump = true; 69 | } 70 | if (Math.abs(red - white) + Math.abs(green - white) + Math.abs(blue - white) <= 15 && jump) { 71 | // 找到lineHeight 72 | lineHeight = r - startY; 73 | log('每行高度:', lineHeight); 74 | break; 75 | } 76 | } 77 | // 寻找startX 78 | var y1 = startY + parseInt(lineHeight * 0.581), 79 | y2 = startY + parseInt(lineHeight * 0.806); 80 | var error = {}; 81 | for (let c = lineHeight; c < parseInt(WIDTH * 0.5); c++) { 82 | error[c] = 0; // 每列的颜色误差 83 | for (let y = y1; y < y2; y++) { 84 | var point = images.pixel(img, c, y); 85 | var red = colors.red(point), 86 | green = colors.green(point), 87 | blue = colors.blue(point); 88 | error[c] += Math.abs(red - white) + Math.abs(green - white) + Math.abs(blue - white); 89 | } 90 | if (error[c] == 0 && redX == 0) { 91 | // 找到redX 92 | redX = c; 93 | log('红点X坐标:', redX); 94 | } 95 | if (c > lineHeight && error[c - 1] <= 15 * (y2 - y1) && error[c] > error[c - 1]) { 96 | // 找到startX 97 | startX = c; 98 | log('消息起始X坐标', startX); 99 | break; 100 | } 101 | } 102 | log('===== 布局检测完毕 ====='); 103 | check = true; 104 | } 105 | 106 | // 检查前三条消息 107 | for (let m = 0; m < 3; m++) { 108 | var redY = startY + parseInt((0.12 + m) * lineHeight) 109 | var point = images.pixel(img, redX, redY); 110 | var red = colors.red(point), 111 | green = colors.green(point), 112 | blue = colors.blue(point); 113 | if (red > 240 && green < 80 && blue < 80) { 114 | // 有未读消息 115 | click(redX, redY + parseInt(0.5 * lineHeight)); 116 | sleep(600); 117 | // 寻找红包颜色 118 | var chat = captureScreen(); 119 | for (let k = parseInt(HEIGHT * 0.9); k > parseInt(HEIGHT * 0.1); k--) { 120 | var point = images.pixel(chat, parseInt(WIDTH * 0.5), k); 121 | var red = colors.red(point), 122 | green = colors.green(point), 123 | blue = colors.blue(point); 124 | if (Math.abs(red - 250) + Math.abs(green - 158) + Math.abs(blue - 59) <= 15) { 125 | // 找到红包 126 | click(parseInt(WIDTH * 0.5), k); 127 | sleep(800); 128 | // 寻找“开” 129 | chat = captureScreen(); 130 | var count = 0; 131 | for (let y = parseInt(HEIGHT * 0.4); y < parseInt(HEIGHT * 0.8); y++) { 132 | var point = images.pixel(chat, parseInt(WIDTH * 0.5), y); 133 | var red = colors.red(point), 134 | green = colors.green(point), 135 | blue = colors.blue(point); 136 | if (Math.abs(red - 235) + Math.abs(green - 205) + Math.abs(blue - 153) <= 15) { 137 | count += 1; 138 | } 139 | } 140 | if (count > HEIGHT * 0.4 * 0.1) { 141 | // 有“开”,点击! 142 | click(parseInt(WIDTH * 0.5), parseInt(HEIGHT * 0.55)); 143 | sleep(1000); 144 | // 查看是否抢到了 145 | chat = captureScreen(); 146 | var count = 0; 147 | for (let y = parseInt(HEIGHT * 0.4); y < parseInt(HEIGHT * 0.8); y++) { 148 | var point = images.pixel(chat, parseInt(WIDTH * 0.5), y); 149 | var red = colors.red(point), 150 | green = colors.green(point), 151 | blue = colors.blue(point); 152 | if (Math.abs(red - 255) + Math.abs(green - 255) + Math.abs(blue - 255) <= 15) { 153 | count += 1; 154 | } 155 | } 156 | if (count > HEIGHT * 0.4 * 0.3) { 157 | totalCount += 1; 158 | } 159 | } 160 | back(); 161 | sleep(600); 162 | break; 163 | } 164 | } 165 | back(); 166 | sleep(600); 167 | } 168 | } 169 | loopCount += 1; 170 | log('已监测', loopCount, '次,抢到', totalCount, '个'); 171 | sleep(1000); 172 | // break; 173 | } while (true); 174 | -------------------------------------------------------------------------------- /微信跳一跳.js: -------------------------------------------------------------------------------- 1 | console.show(); 2 | 3 | // 设备信息 4 | var WIDTH = device.width, 5 | HEIGHT = device.height, 6 | TYPE = device.brand + ' ' + device.model; 7 | log('设备信息:', TYPE, '\n分辨率:', WIDTH, '*', HEIGHT); 8 | 9 | // 获取截图权限 10 | if (!requestScreenCapture()) { 11 | toast('请求截图失败,程序结束'); 12 | exit(); 13 | } 14 | 15 | // 启动微信 16 | launchApp('微信'); 17 | 18 | // 提示用户进入跳一跳页面 19 | new java.lang.Thread(function() { 20 | packageName('com.stardust.scriptdroid').className('android.widget.EditText').setText('准备好后点击 确定'); 21 | }).start(); 22 | console.rawInput('进入微信跳一跳,点击 开始游戏\n点击 确定 开始自动游戏'); 23 | 24 | do { 25 | // 获取截图 26 | var img = captureScreen(); 27 | 28 | // 触按位置 29 | var bx1 = parseInt(WIDTH / 2 + random(-10, 10)), 30 | bx2 = parseInt(WIDTH / 2 + random(-10, 10)), 31 | by1 = parseInt(HEIGHT * 0.785 + random(-4, 4)), 32 | by2 = parseInt(HEIGHT * 0.785 + random(-4, 4)); 33 | 34 | // 棋子底部中心找色 35 | var CHESS_X, CHESS_Y; 36 | var linemax = 0; 37 | for (let r = parseInt(HEIGHT * 0.7); r > parseInt(HEIGHT * 0.5);) { 38 | var line = []; 39 | for (let c = parseInt(WIDTH * 0.15); c < parseInt(WIDTH * 0.85); c++) { 40 | var point = images.pixel(img, c, r); 41 | var red = colors.red(point), 42 | green = colors.green(point), 43 | blue = colors.blue(point); 44 | if (red >= 40 && red <= 70 && green >= 40 && green <= 60 && blue >= 70 && blue <= 105) { 45 | line.push(c); 46 | } 47 | } 48 | if (line.length > linemax) { 49 | linemax = line.length; 50 | CHESS_X = line[Math.floor(line.length / 2)]; 51 | CHESS_Y = r; 52 | } 53 | else if (line.length < linemax) { 54 | break; 55 | } 56 | r -= 5; 57 | } 58 | log('棋子X坐标:', CHESS_X); 59 | 60 | // 目标块顶部中心X坐标 61 | var TARGET_X, TARGET_Y; 62 | for (let r = parseInt(HEIGHT * 0.3); r <= parseInt(HEIGHT * 0.5);) { 63 | var flag = false; 64 | for (let c = parseInt(WIDTH * 0.15); c < parseInt(WIDTH * 0.85); c++) { 65 | if (Math.abs(c - CHESS_X) <= linemax) { 66 | continue 67 | } 68 | var c0 = images.pixel(img, c, r); 69 | var c1 = images.pixel(img, c, r - 5); 70 | if (Math.abs(colors.red(c0) - colors.red(c1)) + Math.abs(colors.green(c0) - colors.green(c1)) + Math.abs(colors.blue(c0) - colors.blue(c1)) >= 30) { 71 | TARGET_X = c; 72 | TARGET_Y = r; 73 | flag = true; 74 | break; 75 | } 76 | } 77 | if (flag) { 78 | break; 79 | } 80 | r += 5; 81 | } 82 | // 寻找白点 83 | var whitepoint = images.findColor(img, '#f5f5f5', { 84 | region: [TARGET_X - 20, TARGET_Y, 40, 250], 85 | threshold: 2 86 | }); 87 | if (whitepoint) { 88 | TARGET_X = whitepoint.x; 89 | } 90 | log('目标块X坐标:', TARGET_X); 91 | 92 | // 跳! 93 | swipe(bx1, by1, bx2, by2, Math.abs(CHESS_X - TARGET_X) / WIDTH * 1900); 94 | sleep(random(1500, 2000)); 95 | } while (true); --------------------------------------------------------------------------------