├── AntForest
├── AliPay.js
├── main_UI.js
├── main_fun.js
└── util.js
├── README.md
└── TaoBaoMiaoBi
├── AliMB.js
├── main_UIMB.js
├── main_funMB.js
└── util.js
/AntForest/AliPay.js:
--------------------------------------------------------------------------------
1 | // 支付宝工具箱
2 | var AliPay = {};
3 | var util = require("./util.js");
4 | // var main = require("./main_UI.js");
5 | var height = device.height;
6 | var width = device.width;
7 | var count = 0;
8 | var countmax = 100;
9 |
10 | // 收取蚂蚁森林能量
11 | AliPay.fun_ant_main = function fun_ant_main(waterThreshold, waterPlanNum, waterMinUnit) {
12 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
13 | toastLog("请为此APP打开以下权限:无障碍服务权限、后台弹出界面");
14 | auto.waitFor();
15 | toastLog("打开支付宝");
16 | setScreenMetrics(width, height);
17 | launch("com.eg.android.AlipayGphone");
18 | sleep(4000);
19 | // waitForPackage("com.eg.android.AlipayGphone");
20 | toastLog("进入支付宝首页,准备收取蚂蚁森林能量");
21 | count = 0;
22 | goto_ant();
23 |
24 | //注册音量下按下退出脚本监听
25 | util.registEvent();
26 | while (!在蚂蚁森林任务页面()) {
27 | toastLog("还没进入蚂蚁森林任务页面呢...");
28 | goto_ant();
29 | sleep(2000);
30 | }
31 | toast("进入蚂蚁森林任务页面");
32 | scrollUp();
33 | scrollUp();
34 | scrollUp();
35 | var myEnergy1 = getMyEnergy();
36 | // 先把自己的能量收了
37 | // 排除区域:250,420,830,1608
38 |
39 | getEnergyByClickAllRegion("me");
40 |
41 | sleep(1000);
42 |
43 | var myEnergyTemp = getMyEnergy();
44 | var info1 = "收取自己的能量" + (myEnergyTemp - myEnergy1) + "g";
45 | toastLog(info1);
46 | // toastLog("[屏幕分辨率]width:" + width + ";height:" + height);
47 |
48 | var jiaoshuiAll = 0;
49 | toastLog("去好友的森林里找能量ing");
50 |
51 | while (!在好友的蚂蚁森林页面() && !在蚂蚁森林任务页面()) {
52 | toastLog("当前不在自己或者好友的蚂蚁森林页面呢,请尽快切换到蚂蚁森林页面...");
53 | sleep(2000);
54 | }
55 |
56 | getEnergyByZhaoNengLiang(jiaoshuiAll);
57 |
58 | toastLog("收能量结束");
59 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
60 | back();
61 | scrollUp();
62 | scrollUp();
63 | scrollUp();
64 | sleep(500);
65 | var myEnergy2 = getMyEnergy();
66 | back();
67 | var info1 = "本次共计为好友浇水" + jiaoshuiAll + "g,\n" + ",能量合计新增" + (myEnergy2 - myEnergy1) + "g";
68 | // dialogs.confirm(info1);
69 | toastLog(info1);
70 | // exit();
71 | }
72 |
73 | // 收能量-找能量
74 | function getEnergyByZhaoNengLiang(jiaoshuiAll) {
75 | var count2 = 3;
76 |
77 |
78 | setScreenMetrics(width, height);
79 | // 连点2次,避免挂件影响
80 | click(util.getStorage("x_znl"), util.getStorage("y_znl"));
81 | sleep(200);
82 | click(util.getStorage("x_znl"), util.getStorage("y_znl"));
83 | sleep(1500);
84 |
85 | // 返回我的森林
86 | if (className("android.view.View").text("startapp?appId=60000002&url=%2Fwww%2Fhome").exists()) {
87 | sleep(500);
88 | toastLog("森林里除了鸟叫,什么也没有发现");
89 | sleep(500);
90 | toastLog("找能量暂未发现可收取能量");
91 | return false;
92 | }
93 | 等待进入好友的蚂蚁森林页面(8000);
94 |
95 | if (在好友的蚂蚁森林页面()) {
96 |
97 | if (++count > countmax) {
98 | toastLog("处理次数超过" + countmax + "次,暂停执行");
99 | return false;
100 | }
101 | var friendName = "好友";
102 | var friendSL = textContains("的蚂蚁森林").className("android.widget.TextView").findOnce();
103 | if (null != friendSL) {
104 | friendName = friendSL.getText();
105 | if (null != friendName) {
106 | friendName = friendName.replace("的蚂蚁森林", "");
107 | }
108 | }
109 | toastLog("已进入好友的蚂蚁森林,准备收取能量:" + friendName);
110 |
111 | var 你收取TA1 = getTaTotal();
112 | getEnergyByClickAllRegion("friend");
113 | sleep(1000);
114 | var 你收取TA2 = getTaTotal();
115 |
116 | var getTa = 你收取TA2 - 你收取TA1;
117 | toastLog("本次收取[" + friendName + "]能量:" + getTa + "g");
118 |
119 |
120 | waterActualNum = waterFun(getTa);
121 | if (waterActualNum > 0) {
122 | toastLog("本次为好友[" + friendName + "]浇水:" + waterActualNum + "g");
123 | }
124 |
125 | jiaoshuiAll = jiaoshuiAll + waterActualNum;
126 | sleep(1000);
127 |
128 | getEnergyByZhaoNengLiang(jiaoshuiAll);
129 | } else if (!在好友的蚂蚁森林页面() && !在蚂蚁森林任务页面()) {
130 | toastLog("当前不在自己或者好友的蚂蚁森林页面呢,请尽快切换到蚂蚁森林页面...");
131 | sleep(2000);
132 | var count1 = 3;
133 | while (!在好友的蚂蚁森林页面() && !在蚂蚁森林任务页面() && count1 > 0) {
134 | back();
135 | sleep(1000);
136 | count1--;
137 | }
138 | if (在好友的蚂蚁森林页面() || 在蚂蚁森林任务页面()) {
139 | getEnergyByZhaoNengLiang(jiaoshuiAll)
140 | }
141 |
142 | } else {
143 | toastLog("[找能量]暂未发现可收取能量");
144 | return false;
145 | }
146 | }
147 |
148 | // 计算"找能量"坐标
149 | // x: 950 ;1080
150 | // y: 1550 ;2160
151 | function calZNLZB() {
152 | util.getStorage("x_znl");
153 | util.getStorage("y_znl");
154 | }
155 |
156 | // 计算"浇水"坐标
157 | // x: 750 ;
158 | // y: 1550 ;
159 | function calJSZB() {
160 |
161 | }
162 |
163 | function getMyEnergy() {
164 | var 我的能量 = 0;
165 | var kj_种树 = className("Button").text("种树").findOnce();
166 | if (kj_种树 != null) {
167 | 我的能量 = kj_种树.parent().children()[1].children()[0].getText();
168 | toastLog("我的能量:" + 我的能量);
169 | return 我的能量.trim().replace("g", "");
170 | } else {
171 | toastLog("当前未在蚂蚁森林首页,无法获取我的能量");
172 | }
173 | return 0;
174 | }
175 |
176 | function getFromTaNum() {
177 | sleep(500);
178 | var 你收取 = text("你收取TA").findOnce();
179 | if (null == 你收取) {
180 | return -1;
181 | }
182 | var 你收取TA = 你收取.parent();
183 | var result;
184 | // log("你收取TA:" + 你收取TA.children());
185 | 你收取TA.children().forEach(function (child) {
186 | // log(child.className());
187 | // log(child.text());
188 | if (child.text().endsWith("g")) {
189 | // log(child.text());
190 | // log(child.text().trim().replace("g", ""));
191 | result = child.text().trim().replace("g", "");
192 | // 跳出 forEach循环使用return false,而不是break;
193 | return false;
194 | }
195 | });
196 | return result;
197 | }
198 |
199 |
200 | function getFromMeNum() {
201 | var TA收取你 = text("TA收取你").findOnce().parent();
202 | var result;
203 | // log("TA收取你:" + TA收取你.children());
204 | TA收取你.children().forEach(function (child) {
205 | // log("TA收取你22:"+child.text());
206 | if (child.text().endsWith("g")) {
207 | // log(child.text());
208 | result = child.text().trim().replace("g", "");
209 | // 跳出 forEach循环使用return false,而不是break;
210 | return false;
211 | }
212 | });
213 | return result;
214 | }
215 |
216 | function getHelpTaNum() {
217 | sleep(500);
218 | var 你给TA助力 = text("你给TA助力").findOnce().parent();
219 | var result;
220 | // log("你收取TA:" + 你收取TA.children());
221 | 你给TA助力.children().forEach(function (child) {
222 | // log(child.className());
223 | // log(child.text());
224 | if (child.text().endsWith("g")) {
225 | // log(child.text());
226 | // log(child.text().trim().replace("g", ""));
227 | result = child.text().trim().replace("g", "");
228 | // 跳出 forEach循环使用return false,而不是break;
229 | return false;
230 | }
231 | });
232 | return result;
233 | }
234 |
235 | function getHelpMeNum() {
236 | sleep(500);
237 | var TA给你助力 = text("TA给你助力").findOnce().parent();
238 | var result;
239 | TA给你助力.children().forEach(function (child) {
240 | // log(child.className());
241 | // log(child.text());
242 | if (child.text().endsWith("g")) {
243 | // log(child.text());
244 | // log(child.text().trim().replace("g", ""));
245 | result = child.text().trim().replace("g", "");
246 | // 跳出 forEach循环使用return false,而不是break;
247 | return false;
248 | }
249 | });
250 | return result;
251 | }
252 | function getTaTotal() {
253 | var getTa = 0;
254 | try {
255 | getTa = parseInt(getFromTaNum()) + parseInt(getHelpTaNum());
256 | } catch (error) {
257 | try {
258 | sleep(1000);
259 | getTa = parseInt(getFromTaNum()) + parseInt(getHelpTaNum());
260 | } catch (error2) {
261 | toastLog("[error]计算收取好友能量数量失败,再次计算");
262 | }
263 | }
264 |
265 | return getTa;
266 | }
267 |
268 |
269 | // 收能量-覆盖点击区域内所有坐标
270 | // 收自己的能量:xmin=220, ymin=500, xmax=900, ymax=810;
271 | // 收好友的能量:xmin=220, ymin=500, xmax=900, ymax=810;
272 | // type:me、friend;
273 | function getEnergyByClickAllRegion(type) {
274 | toastLog("[start]收取蚂蚁森林能量:" + type);
275 | setScreenMetrics(width, height);
276 |
277 | var xmin = util.getStorage("kj_xmin");
278 | var ymin = util.getStorage("kj_ymin");
279 | var xmax = util.getStorage("kj_xmax");
280 | var ymax = util.getStorage("kj_ymax");
281 | // 间隔是能量球的半径
282 | for (var x1 = xmin; x1 < xmax; x1 += 100) {
283 | for (var y1 = ymin; y1 < ymax; y1 += 100) {
284 | // console.log("col:"+col+",row:"+row);
285 | click(x1, y1);
286 | sleep(30);
287 | if (!(在好友的蚂蚁森林页面() || 在蚂蚁森林任务页面())) {
288 | sleep(500);
289 | if (!(在好友的蚂蚁森林页面() || 在蚂蚁森林任务页面())) {
290 | toastLog("当前不在自己或者好友的蚂蚁森林,立即返回");
291 | back();
292 | sleep(1000);
293 | }
294 | }
295 | }
296 | }
297 | sleep(1000);
298 | toastLog("[end]收取蚂蚁森林能量:" + type);
299 | }
300 |
301 | // waterThreshold 浇水阀值,getNum 收取能量数量,waterPlanNum达到阀值后浇水数量, waterMinUnit浇水最小单位
302 | function waterFun(getNum) {
303 | if (getNum <= 0) {
304 | return 0;
305 | }
306 | var waterMaxCount = parseInt(getNum / util.getStorage("kj_waterThreshold"));
307 | var waterNum = waterMaxCount * util.getStorage("kj_waterPlanNum");
308 | if (waterMaxCount < 1 || waterNum < util.getStorage("kj_waterPlanNum")) {
309 | // 计划浇水小于waterPlanNum(默认10g,就不浇水了
310 | return 0;
311 | }
312 |
313 | var waterActualNum = 0;
314 | // if (null != selectWater) {
315 | waterActualNum = calAndWater(waterNum, util.getStorage("kj_waterMinUnit"));
316 | // calAndWater(30, 10);
317 | // }
318 |
319 | sleep(800);
320 | return waterActualNum;
321 | }
322 |
323 | // 计算浇水数量并浇水: waterThreshold 浇水阀值,每收取多少g浇水10g; getNum 实际收取能量g数
324 | function calAndWater(waterNum, waterMinUnit) {
325 | var info = "计划浇水" + waterNum + "g,";
326 | var waterArr = [];
327 | while (waterArr.length < 3 && waterNum >= 1) {
328 | if (waterNum >= 66 && 66 >= waterMinUnit) {
329 | waterNum = waterNum - 66;
330 | waterArr.push(66);
331 | } else if (waterNum >= 33 && 33 >= waterMinUnit) {
332 | waterNum = waterNum - 33;
333 | waterArr.push(33);
334 | } else if (waterNum >= 18 && 18 >= waterMinUnit) {
335 | waterNum = waterNum - 18;
336 | waterArr.push(18);
337 | } else if (waterNum >= 10 && 10 >= waterMinUnit) {
338 | waterNum = waterNum - 10;
339 | waterArr.push(10);
340 | } else {
341 | break;
342 | }
343 | }
344 | // 排序
345 | waterArr.sort(function (a, b) {
346 | return a - b;
347 | });
348 | toastLog(info + "实际浇水计划:" + waterArr);
349 | var waterActualNum = 0;
350 | setScreenMetrics(width, height);
351 | for (var i = 0; i < waterArr.length; i++) {
352 | // 新式浇水啦
353 | // var 浇水 = className("android.widget.Button").text("浇水").findOnce();
354 | // click(浇水.bounds().centerX(), 浇水.bounds().centerY());
355 | click(util.getStorage("x_jiaoshui"), util.getStorage("y_jiaoshui"));
356 | sleep(700);
357 | var selectWater = text("请选择为TA浇水的克数").findOne(3000);
358 | if (null == selectWater) {
359 | toastLog("今日浇水已达上限");
360 | break;
361 | }
362 | waterNew(waterArr[i]);
363 | waterActualNum += waterArr[i];
364 | sleep(500);
365 | }
366 | return waterActualNum;
367 | }
368 | function waterNew(param) {
369 | // param:10克,18克,33克,66克,浇水送祝福
370 | sleep(300);
371 | toastLog("即将浇水" + param + "g");
372 | var 浇水克数 = text(param + "克").className("android.widget.Button").clickable().findOnce();
373 | sleep(200);
374 | if (浇水克数 == null) {
375 | click(util.getStorage("x_jiaoshui"), util.getStorage("y_jiaoshui"));
376 | } else {
377 | 浇水克数.click();
378 | }
379 | sleep(600);
380 | var 浇水送祝福 = text("浇水送祝福").className("android.widget.Button").clickable().findOnce();
381 | if (null != 浇水送祝福) {
382 | 浇水送祝福.click();
383 | toastLog("浇水送祝福:" + param + "g");
384 | }
385 | sleep(300);
386 | }
387 |
388 | AliPay.领积分 = function fun_领积分() {
389 | auto.waitFor();
390 | toastLog("打开支付宝");
391 | launch("com.eg.android.AlipayGphone");
392 | sleep(4000);
393 | toastLog("此时需在支付宝首页哦");
394 | // waitForPackage("com.eg.android.AlipayGphone");
395 | toastLog("进入支付宝首页,准备领积分");
396 | while (!(Boolean(在支付宝首页()) || Boolean(在支付宝我的首页()) || Boolean(在支付宝会员首页()))) {
397 | // scrollUp();
398 | // back();
399 | // scrollUp();
400 | toastLog("当前未在支付宝首页呢...");
401 | sleep(2000);
402 | }
403 | sleep(1000);
404 | toastLog("即将进入【支付宝-我的】主页...");
405 | if (Boolean(在支付宝首页())) {
406 | scrollUp();
407 | text("我的").findOnce().parent().click();
408 | }
409 |
410 | sleep(500);
411 | while (!(Boolean(在支付宝我的首页()) || Boolean(在支付宝会员首页()))) {
412 | scrollUp();
413 | toastLog("还没进入【支付宝-我的】主页呢...");
414 | sleep(2000);
415 | }
416 | toastLog("即将进入【支付宝会员】主页...");
417 | util.swipeUp();
418 | util.swipeUp();
419 | sleep(1000);
420 | if (!在支付宝会员首页()) {
421 | // click("支付宝会员");
422 | setScreenMetrics(width, height);
423 | click(util.getStorage("x_zfbhy"), util.getStorage("y_zfbhy"));
424 | }
425 | sleep(2000);
426 | while (!(Boolean(在支付宝会员首页()))) {
427 | scrollUp();
428 | toastLog("还没进入【支付宝会员】主页呢...");
429 | sleep(2000);
430 | }
431 | toastLog("即将领积分...");
432 | click("领积分");
433 | sleep(2000);
434 | util.swipeUp();
435 | util.swipeUp();
436 | while (textContains("签到").findOne() || textContains("规则").findOne()) {
437 | // scrollUp();
438 | sleep(500);
439 | scrollUp();
440 | var re = click("点击领取");
441 | if (!re) {
442 | break;
443 | }
444 | }
445 | toastLog("领取支付宝积分结束");
446 | back();
447 | back();
448 | back();
449 | }
450 |
451 | // 进入蚂蚁森林主页
452 | function goto_ant() {
453 | // 支付宝内部功能调用appId
454 | app.startActivity({
455 | action: "VIEW",
456 | data: "alipays://platformapi/startapp?appId=60000002",
457 | });
458 | }
459 |
460 | function 在支付宝底部界面() {
461 | if (text("我的").exists() && text("首页").exists()) {
462 | return true;
463 | } else {
464 | return false;
465 | }
466 | }
467 |
468 | function 在支付宝首页() {
469 | if (text("我的").exists() && text("扫一扫").exists()) {
470 | return true;
471 | } else {
472 | return false;
473 | }
474 | }
475 |
476 | function 在支付宝我的首页() {
477 | if (text("我的").exists() && desc("设置").exists()) {
478 | return true;
479 | } else {
480 | return false;
481 | }
482 | }
483 |
484 | function 在支付宝会员首页() {
485 | if (text("会员中心").exists() && text("个人中心").exists()) {
486 | return true;
487 | } else {
488 | return false;
489 | }
490 | }
491 |
492 | function 在蚂蚁森林任务页面() {
493 | if (text("种树").exists()) {
494 | return true;
495 | } else {
496 | return false;
497 | }
498 | }
499 |
500 | function 在好友的蚂蚁森林页面() {
501 | if (textContains("的蚂蚁森林").exists()) {
502 | return true;
503 | } else {
504 | return false;
505 | }
506 | }
507 |
508 |
509 | function 等待进入好友的蚂蚁森林页面(timeout) {
510 | textContains("的蚂蚁森林").findOne(timeout);
511 | // text("浇水").findOne(timeout);
512 | }
513 |
514 | module.exports = AliPay;
--------------------------------------------------------------------------------
/AntForest/main_UI.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var height = device.height;
3 | var width = device.width;
4 | var version = "202011011500";
5 | var versionDesc = "11月优化逻辑优化,支持2020年10月版支付宝";
6 |
7 | var main = {};
8 | ui.layout(
9 |
10 |
11 |
12 |
13 |
14 |
15 | {/* */}
16 | {/* */}
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | {/*
36 |
37 |
38 |
39 |
40 | */}
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {/* */}
51 |
52 |
53 | {/* */}
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | );
66 | toastLog(ui.kj_aboutThis.getText());
67 |
68 | // engines.execScriptFile("main_ant_miaobi.js");
69 | var module_main_fun = require("./main_fun.js");
70 | var module_util = require("./util.js");
71 |
72 | initData();
73 |
74 | this.fun_checkUpdate(version);
75 |
76 | ui.kj_findMe.click(() => {
77 |
78 | threads.start(function () {
79 | let info = "程序将自动打开微信,搜索订阅号zxiaofan,\n\n" +
80 | " 你可以在这里联系我哟。";
81 | // toastLog(info);
82 | var result = dialogs.confirm(info);
83 | // var result = true;
84 | if (result) {
85 | var dyh = "zxiaofan";
86 | setClip(dyh);
87 | module_main_fun.findMe(dyh);
88 | } else {
89 | toastLog("你也可以手动前往公众号搜索zxiaofan找我");
90 | }
91 | });
92 | });
93 |
94 |
95 |
96 | ui.kj_openConsole.click(() => {
97 |
98 | threads.start(function () {
99 | let info = "是否确认打开日志窗口?\n\n" +
100 | "如果日志窗口区域有点击操作,请勿打开日志窗口。";
101 |
102 | var result = dialogs.confirm(info);
103 | if (result) {
104 | console.show();
105 | // console.setPosition(0, 0);
106 | // console.setSize(100, 50);
107 | toastLog("打开日志窗口");
108 | } else {
109 | toastLog("取消打开日志窗口");
110 | }
111 | });
112 | });
113 |
114 |
115 | ui.kj_closeConsole.click(() => {
116 |
117 | threads.start(function () {
118 | toastLog("关闭日志窗口");
119 | console.hide();
120 | });
121 | });
122 |
123 |
124 | ui.kj_clearLog.click(() => {
125 |
126 | threads.start(function () {
127 | toastLog("清理日志");
128 | console.clear();
129 | });
130 | });
131 |
132 |
133 | ui.kj_resetParam.click(() => {
134 |
135 | toastLog("恢复默认参数配置");
136 | module_util.clearStorage();
137 | resetUIData();
138 | setStorageData();
139 |
140 | });
141 |
142 |
143 | ui.kj_about.click(() => {
144 | let info = "" +
145 | "1、APP需要打开以下权限:无障碍服务权限、后台弹出界面;\n\n" +
146 | " 权限必须提前打开,否则可能执行失败;\n\n" +
147 | " 权限必须提前打开!!!\n\n" +
148 | "2、更新说明:11月优化逻辑优化,支持2020年10月版支付宝;\n\n" +
149 | "3、【支付宝会员领积分】:\n" +
150 | // " 2.1、浏览店铺领喵币;\n" +
151 | // " 2.2、天降喵币;\n" +
152 | // " 2.3、店铺签到领喵币;\n" +
153 | // " 2.4、领喵币主页签到;\n" +
154 | // " 2.5、开心农场签到(需手动领喵币);\n\n" +
155 | "4、【蚂蚁森林能量】:\n" +
156 | " 4.1、支持收取能量同时给好友浇水(默认每收取该好友30g能量,则浇水10g);\n\n" +
157 | " 4.2、收能量已改版,每天最多浇水3次,实际浇水优先级:66g>33g>18g>10g;\n\n" +
158 | " 如计划浇水10g,则实际浇水10g 1次;计划浇水30g,则实际浇水18g1次+10g1次;\n\n" +
159 | " 计划浇水80g,则实际浇水66g1次+10g1次;\n\n" +
160 |
161 | "5、【日志】:\n" +
162 | " 5.1、如果使用有bug,可在使用后“打开日志窗口”,分析日志;\n\n" +
163 | "6、Build By zxiaofan(订阅号、CSDN)";
164 |
165 | // dialogs.confirm(info);
166 | dialogs.build({
167 | title: "使用说明",
168 | content: info
169 | }
170 | ).show();
171 | });
172 |
173 |
174 |
175 | ui.kj_checkUpdate.click(() => {
176 | // log("main_ant_miaobi:" + module_main_ant_miaobi);
177 | this.fun_checkUpdate(version);
178 | // exit();
179 | });
180 |
181 |
182 |
183 | // ui.kj_tbnl.click(() => {
184 | // module_main_fun.getTaoBaoNengLiang_main();
185 | // });
186 |
187 |
188 | // ui.kj_miaobi.click(() => {
189 | // module_main_ant_miaobi.getMiaoBi_main();
190 | // });
191 |
192 | // 收取蚂蚁森林能量
193 | // ui.kj_ant.click(() => {
194 | // module_main_fun.ant_main(999);
195 | // });
196 |
197 | // 收取蚂蚁森林能量-浇水
198 | // ui.kj_HiAnt.click(() => {
199 | // // toastLog(ui.kj_HiAntCount.getText());
200 | // module_main_fun.ant_main(ui.kj_HiAntCount.getText());
201 | // });
202 |
203 | // 一条龙
204 | ui.kj_all.click(() => {
205 | toastLog("一条龙Starting...");
206 |
207 |
208 | setStorageData();
209 | var thread = threads.start(function () {
210 | var res;
211 | if (ui.kj_select_显示悬浮窗.isChecked()) {
212 | console.hide();
213 | toastLog("[Start]" + ui.kj_select_显示悬浮窗.getText());
214 | showConsole();
215 | }
216 | // 收取蚂蚁森林能量
217 | if (ui.kj_select_ant.isChecked()) {
218 | toastLog("[Start]" + ui.kj_select_ant.getText());
219 | res = module_main_fun.main_method("蚂蚁森林", false, 999, 0);
220 | }
221 |
222 | // 收取蚂蚁森林能量-浇水
223 | if (ui.kj_select_water.isChecked()) {
224 | toastLog("[Start]" + ui.kj_select_water.getText());
225 | toastLog("每收取好友" + ui.kj_waterThreshold.getText() + "g能量浇水" + ui.kj_waterPlanNum.getText() + "g。");
226 | res = module_main_fun.main_method("蚂蚁森林", false, ui.kj_waterThreshold.getText(), ui.kj_waterPlanNum.getText(), ui.kj_waterMinUnit.getText());
227 | }
228 | if (ui.kj_select_领取支付宝积分.isChecked()) {
229 | toastLog("[Start]" + ui.kj_select_领取支付宝积分.getText());
230 | res = module_main_fun.main_method("支付宝会员积分", false, version, 0);
231 | }
232 |
233 | // if(ui.kj_select_收取淘宝双十二能量.isChecked()){
234 | // toastLog("[Start]"+ui.kj_select_收取淘宝双十二能量.getText());
235 | // module_main_fun.main_method("淘宝收能量", false,version);
236 | // }
237 | res.blockedGet();
238 | toastLog("[End] 一条龙处理完毕");
239 | dialogs.confirm("蚂蚁森林能量已为您收取完毕,请查收;最新版APP请前往公众号【zxiaofan】留言“蚂蚁森林”获取");
240 | });
241 | // thread.join(); // 会卡死的,可能使无障碍服务失效,需要重启手机
242 |
243 | });
244 |
245 | function showConsole() {
246 | console.hide()
247 | sleep(200);
248 | console.show();
249 | // console.setSize(500, 300);
250 | console.setPosition(20, device.height - 900);
251 | };
252 |
253 | ui.kj_close.click(() => {
254 | engines.stopAllAndToast();
255 | ui.finish();
256 | exit();
257 | });
258 |
259 |
260 | ui.kj_gotoGitHub.click(() => {
261 | app.openUrl("https://github.com/zxiaofan/AutoJsProject");
262 | });
263 |
264 |
265 | function fun_checkUpdate(version) {
266 | var thread = threads.start(function () {
267 | var updateResult = module_main_fun.checkUpdate(version);
268 | // toastLog("fun_checkUpdate:" + updateResult);
269 | if (updateResult != "") {
270 | ui.kj_checkUpdate.setText("【检查更新】APP已更新,赶紧使用最新版吧");
271 | } else {
272 | ui.kj_checkUpdate.setText("【检查更新】");
273 | }
274 | });
275 | }
276 |
277 | function setStorageData() {
278 | var storage = storages.create("zxiaofan:ant");
279 |
280 | storage.put("kj_waterThreshold", parseInt(ui.kj_waterThreshold.getText()));
281 | storage.put("kj_waterPlanNum", parseInt(ui.kj_waterPlanNum.getText()));
282 | storage.put("kj_waterMinUnit", parseInt(ui.kj_waterMinUnit.getText()));
283 | // storage.put("kj_waterPointX", parseInt(ui.kj_waterPointX.getText()));
284 | // storage.put("kj_waterPointY", parseInt(ui.kj_waterPointY.getText()));
285 |
286 | // 收好友的能量:xmin=220, ymin=500, xmax=900, ymax=810;
287 | storage.put("kj_xmax", parseInt(ui.kj_friendXmax.getText()));
288 | storage.put("kj_ymax", parseInt(ui.kj_friendYmax.getText()));
289 | storage.put("kj_xmin", 220);
290 | storage.put("kj_ymin", 500);
291 |
292 | storage.put("x_znl", 950);
293 | storage.put("y_znl", 1550);
294 | storage.put("x_jiaoshui", 750);
295 | storage.put("y_jiaoshui", 1550);
296 |
297 | // 我的-支付宝会员
298 | storage.put("x_zfbhy", 500);
299 | storage.put("y_zfbhy", 500);
300 |
301 |
302 | // console.log(storage.get("a"));
303 | // console.log(storage.get("kj_waterThreshold"));
304 | // console.log(getStorage("kj_friendXmax"));
305 | // console.log(getStorage("kj_friendXmax").mText());
306 | }
307 |
308 | function initData() {
309 | var storage = storages.create("zxiaofan:ant");
310 | console.log(storage.get("kj_waterThreshold"));
311 |
312 | if (storage.contains("kj_waterThreshold")) {
313 | ui.kj_waterThreshold.setText(storage.get("kj_waterThreshold") + "");
314 | }
315 | if (storage.contains("kj_waterPlanNum")) {
316 | ui.kj_waterPlanNum.setText(storage.get("kj_waterPlanNum") + "");
317 | }
318 | if (storage.contains("kj_waterMinUnit")) {
319 | ui.kj_waterMinUnit.setText(storage.get("kj_waterMinUnit") + "");
320 | }
321 | // if (storage.contains("kj_waterPointX")) {
322 | // ui.kj_waterPointX.setText(storage.get("kj_waterPointX") + "");
323 | // }
324 | // if (storage.contains("kj_waterPointY")) {
325 | // ui.kj_waterPointY.setText(storage.get("kj_waterPointY") + "");
326 | // }
327 | if (storage.contains("kj_friendXmax")) {
328 | ui.kj_friendXmax.setText(storage.get("kj_friendXmax") + "");
329 | }
330 | if (storage.contains("kj_friendYmax")) {
331 | ui.kj_friendYmax.setText(storage.get("kj_friendYmax") + "");
332 | }
333 | module_util.getUid("ant");
334 | }
335 |
336 | function resetUIData() {
337 | var storage = storages.create("zxiaofan:ant");
338 |
339 | ui.kj_waterThreshold.setText("30");
340 | ui.kj_waterPlanNum.setText("10");
341 |
342 | ui.kj_waterMinUnit.setText("10");
343 |
344 | ui.kj_friendXmax.setText("900");
345 |
346 | ui.kj_friendYmax.setText("810");
347 |
348 | }
349 |
350 |
351 | // context.exports = main;
--------------------------------------------------------------------------------
/AntForest/main_fun.js:
--------------------------------------------------------------------------------
1 | var versionUrl = "http://zxiaofan.com/tc/b/201911/tbmbversion.txt";
2 | var height = device.height;
3 | var width = device.width;
4 | var count = 0;
5 | var countmax = 100;
6 |
7 | var util = require("./util.js");
8 | var AliPay = require("./AliPay.js");
9 |
10 | var main_fun = {};
11 |
12 | // 联系我
13 | main_fun.findMe = function findMe(dyh) {
14 | var thread = threads.start(function () {
15 | findMeFun(dyh, false);
16 | });
17 | return thread;
18 | };
19 |
20 | // 检查更新
21 | // checkUpdate 没有括号
22 | main_fun.checkUpdate = function checkUpdate(version) {
23 | // var thread = threads.start(function () {
24 | // checkUpdateFun(version);
25 | // });
26 | // toastLog(thread);
27 | // return thread;
28 | var checkRes = checkUpdateFun(version);
29 | return checkRes;
30 | };
31 |
32 | // 收取蚂蚁森林能量
33 | main_fun.ant_main = function ant_main(waterThreshold, waterPlanNum) {
34 | var dis_result1 = threads.disposable();
35 | var thread = threads.start(function () {
36 | AliPay.fun_ant_main(waterThreshold, waterPlanNum);
37 | });
38 | dis_result1.setAndNotify(1);
39 | return dis_result1;
40 | };
41 |
42 | // 收取淘宝喵币
43 | main_fun.getMiaoBi_main = function getMiaoBi_main() {
44 | var dis_result2 = threads.disposable();
45 | var thread = threads.start(function () {
46 | fun_getMiaoBi_main();
47 | });
48 | dis_result2.setAndNotify(2);
49 | return dis_result2;
50 | };
51 |
52 | // 收取淘宝能量
53 | main_fun.getTaoBaoNengLiang_main = function getTaoBaoNengLiang_main() {
54 | var dis_result3 = threads.disposable();
55 | var thread = threads.start(function () {
56 | fun_getTaoBaoNengLiang_main();
57 | });
58 | dis_result3.setAndNotify(3);
59 | return dis_result3;
60 | };
61 |
62 |
63 | // 领取支付宝积分
64 | main_fun.领积分 = function 领积分_main() {
65 | var dis_result4 = threads.disposable();
66 | var thread = threads.start(function () {
67 | AliPay.领积分();
68 | });
69 | dis_result4.setAndNotify(4);
70 | return dis_result4;
71 | };
72 |
73 | main_fun.main_method = function main_method(method, boolThread, waterThreshold, waterPlanNum, waterMinUnit) {
74 | if ("蚂蚁森林" == method) {
75 | if (boolThread) {
76 | var dis_result1 = threads.disposable();
77 | var thread = threads.start(function () {
78 | AliPay.fun_ant_main(waterThreshold, waterPlanNum, waterMinUnit);
79 | dis_result1.setAndNotify(1);
80 | });
81 | dis_result1.blockedGet();
82 | return dis_result1;
83 | } else {
84 | AliPay.fun_ant_main(waterThreshold, waterPlanNum, waterMinUnit);
85 | }
86 | } else if ("支付宝会员积分" == method) {
87 | if (boolThread) {
88 | var dis_result4 = threads.disposable();
89 | var thread = threads.start(function () {
90 | AliPay.领积分();
91 | dis_result4.setAndNotify(4);
92 | });
93 | dis_result4.blockedGet();
94 | return dis_result4;
95 | } else {
96 | AliPay.领积分();
97 | }
98 | } else if ("淘宝收能量" == method) {
99 | if (boolThread) {
100 | var dis_result3 = threads.disposable();
101 | var thread = threads.start(function () {
102 | fun_getTaoBaoNengLiang_main();
103 | dis_result3.setAndNotify(3);
104 | });
105 | dis_result3.blockedGet();
106 | return dis_result3;
107 | } else {
108 | fun_getTaoBaoNengLiang_main();
109 | }
110 | }
111 | }
112 |
113 | function checkUpdateFun(version) {
114 | var response = null;
115 | toastLog("检查更新中");
116 | // toastLog("获取新版本号:" + versionUrl);
117 | threads.start(function () {
118 | var reqUrl = versionUrl;
119 | if (reqUrl.indexOf("zxiaofan") > -1) {
120 | reqUrl += "?version=" + version + "?uid=" + util.getStorage("uid");
121 | }
122 | var r = http.get(reqUrl, {}, function (res, err) {
123 | if (err) {
124 | console.error(err);
125 | return;
126 | }
127 | response = res;
128 | });
129 | });
130 | let timeOutTimes = 20;
131 | for (let i = 0; i < timeOutTimes; i++) {
132 | if (response == null) {
133 | sleep(200);
134 | if (i > 2) {
135 | toastLog("查询最新版本ing:" + i);
136 | }
137 | } else {
138 | break;
139 | }
140 | }
141 | var versionEsc = null;
142 | // toastLog("response:" + response);P
143 | if (response.statusCode >= 200 && response.statusCode <= 304) {
144 | versionEsc = response.body.string();
145 | } else {
146 | toastLog("检查更新失败,请前往订阅号zxiaofan回复关键字【蚂蚁森林】获取最新版APP");
147 | }
148 |
149 | sleep(2000);
150 | var info = "";
151 | if (version.length >= 12 && versionEsc.length >= 12 && version.substring(0, 12) == versionEsc.substring(0, 12)) {
152 | toastLog("当前已是最新版");
153 | } else {
154 | toastLog("【当前版本】" + version + ";【服务器版本】" + versionEsc);
155 | info = "APP已更新,请前往订阅号zxiaofan回复关键字【蚂蚁森林】获取最新版APP:" + versionEsc;
156 | dialogs.confirm(info);
157 | }
158 | return info;
159 | };
160 |
161 |
162 | function findMeFun(dyh, autoGuanzhu) {
163 | sleep(500);
164 | toastLog("打开微信搜索 " + dyh);
165 | launch("com.tencent.mm");
166 | sleep(1000);
167 | waitForPackage("com.tencent.mm");
168 | // logKJInfo(搜索);
169 | toastLog("点击搜索...");
170 | var 微信头 = textStartsWith("微信(").findOnce();
171 | var inttemp = 0;
172 | while (inttemp < 4 && null == 微信头) {
173 | toastLog("当前不在微信首页");
174 | back();
175 | inttemp++;
176 | sleep(1000);
177 | 微信头 = textStartsWith("微信(").findOnce();
178 | }
179 | // logKJInfo(微信头);
180 |
181 | for (var col = device.width / 2; col < device.width; col += 100) {
182 | var clickResult = click(col, 微信头.bounds().centerY());
183 | if (!textStartsWith("微信(").exists()) {
184 | sleep(500);
185 | toastLog("进入搜索...");
186 | break;
187 | }
188 | sleep(50);
189 | }
190 |
191 |
192 | sleep(1000);
193 | var 搜索框 = className("android.widget.EditText").findOnce();
194 | if (null != 搜索框) {
195 | 搜索框.setText(dyh);
196 | click("搜一搜 " + dyh);
197 | sleep(600);
198 | var factor = 13;
199 | util.swipeAuto(0.5, 0.4, 0.5, 0.2, factor);
200 | scrollUp();
201 | sleep(600);
202 | util.swipeAuto(0.5, 0.4, 0.5, 0.2, factor);
203 | util.swipeAuto(0.5, 0.6, 0.5, 0.2, factor);
204 | var 搜索zxf = textStartsWith("搜一搜").textEndsWith(dyh).findOne(1000);
205 | // logKJInfo(搜索zxf);
206 | util.clickByKJBounds(搜索zxf);
207 |
208 | sleep(600);
209 | text(dyh).waitFor();
210 | sleep(1500);
211 | if (!textContains("公众号").findOnce()) {
212 | sleep(1000);
213 | }
214 | if (!textContains("公众号").findOnce()) {
215 | sleep(1000);
216 | }
217 | if (!textContains("公众号").findOnce()) {
218 | sleep(1000);
219 | }
220 | toastLog("点击公众号" + dyh);
221 | click("公众号", 0);
222 | sleep(1000);
223 | var kj_dyh = text(dyh).findOnce();
224 | if (null != kj_dyh) {
225 | toastLog("点击公众号.." + dyh);
226 | kj_dyh.parent().click();
227 | }
228 | sleep(1000);
229 |
230 | if (autoGuanzhu) {
231 | click("关注公众号");
232 | } else if (!textContains("不再关注").findOnce()) {
233 | toastLog("还没关注" + dyh + "?\n赶紧和你的朋友一起关注吧");
234 | }
235 | }
236 | }
237 |
238 |
239 | function fun_getTaoBaoNengLiang_main() {
240 | // 历史版本暂不开源,今年双11开源
241 | }
242 |
243 |
244 | function quliulan() {
245 | // 历史版本暂不开源,今年双11开源
246 |
247 | }
248 |
249 | function shopSign() {
250 | // 历史版本暂不开源,今年双11开源
251 | }
252 |
253 | function tjmb() {
254 | // 领取天降喵币
255 | // 历史版本暂不开源,今年双11开源
256 | }
257 | function getOwnMiaoBi() {
258 | sleep(1000);
259 |
260 | }
261 |
262 | module.exports = main_fun;
--------------------------------------------------------------------------------
/AntForest/util.js:
--------------------------------------------------------------------------------
1 | var util = {};
2 |
3 |
4 | // 点击元素的中心位置
5 | util.clickByKJBounds = function clickByKJBounds(kj) {
6 | if (kj == null) {
7 | return false;
8 | }
9 | var result = false;
10 | try {
11 | click(kj.bounds().centerX(), kj.bounds().centerY());
12 | result = true;
13 | } catch (e) {
14 |
15 | };
16 | return result;
17 | }
18 |
19 | // 自动模拟滑动(随机因子)
20 | util.swipeAuto = function swipeAuto(x1factor, y1factor, x2factor, y2factor, factor) {
21 | swipe(device.width * x1factor + parseInt(random() * factor), device.height * y1factor + parseInt(random() * factor), device.width * x2factor + parseInt(random() * factor), device.height * y2factor + parseInt(random() * factor), 600);
22 | }
23 |
24 | // 看下面的数据
25 | util.swipeDown = function swipeDown() {
26 | var factor = 53;
27 | swipe(device.width / 2 + parseInt(random() * factor), device.height / 4 * 3 + parseInt(random() * factor), device.width / 2 + parseInt(random() * factor), device.height / 5 + parseInt(random() * factor), 600);
28 | }
29 |
30 |
31 |
32 | /** swipe(x1, y1, x2, y2, duration)
33 | x1 {number} 滑动的起始坐标的x值
34 | y1 {number} 滑动的起始坐标的y值
35 | x2 {number} 滑动的结束坐标的x值
36 | y2 {number} 滑动的结束坐标的y值
37 | duration {number} 滑动时长,单位毫秒
38 | */
39 |
40 | // 看上面的数据
41 | util.swipeUp = function swipeUp() {
42 | var factor = 57;
43 | swipe(device.width / 2 + parseInt(random() * factor), device.height / 4 + parseInt(random() * factor), device.width / 2 + parseInt(random() * factor), device.height / 5 * 4 + parseInt(random() * factor), 600);
44 | }
45 |
46 |
47 | /**
48 | * 设置按键监听 当脚本执行时候按音量减 退出脚本
49 | */
50 | util.registEvent = function registEvent() {
51 | //启用按键监听
52 | events.observeKey();
53 | //监听音量下键按下
54 | events.onKeyDown("volume_down", function (event) {
55 | toastLog("音量下键被按下了");
56 | exit();
57 | });
58 | }
59 |
60 | /**
61 | * 获取指定应用数据
62 | */
63 | util.getStorage = function getStorage(key) {
64 | var storage = storages.create("zxiaofan:ant");
65 | // console.log("storages:"+storage.get(key) );
66 |
67 | return storage.get(key);
68 | }
69 |
70 | util.clearStorage = function clearStorage() {
71 | var storage = storages.create("zxiaofan:ant");
72 | return storage.clear();
73 | }
74 |
75 | util.readFile = function readFile(filePath) {
76 | var content = "NULL";
77 | try {
78 | content = files.read(filePath);
79 | } catch (error) {
80 | log(error);
81 | }
82 | return content;
83 | }
84 |
85 | util.createUid = function createUid(sign) {
86 | var random1 = random(10, 999);
87 | if (random1 < 99) {
88 | random1 = "0" + random1;
89 | }
90 | return sign + "uid" + this.getYYYYMMddHHmmssS() + random1;
91 | }
92 |
93 |
94 | util.getUid = function getUid(sign) {
95 | var storage = storages.create("zxiaofan:" + sign);
96 | var uid = storage.get("uid");
97 | if (uid) {
98 | return uid;
99 | }
100 | var cachePath = "/sdcard/" + sign + "/cache.txt";
101 | uid = this.readFile(cachePath);
102 | if (uid != "" && uid != "NULL") {
103 | storage.put("uid", uid);
104 | return uid;
105 | }
106 | uid = this.createUid(sign);
107 | storage.put("uid", uid);
108 | files.createWithDirs(cachePath);
109 | files.write(cachePath, uid);
110 | return uid;
111 | }
112 |
113 |
114 | util.getYYYYMMddHHmmssS = function getYYYYMMddHHmmssS() {
115 | var date = new Date();
116 | var year = date.getFullYear();
117 | var month = date.getMonth() + 1;
118 |
119 | if (month >= 1 && month <= 9) {
120 | month = "0" + month;
121 | }
122 | var strDate = date.getDate();
123 | if (strDate >= 0 && strDate <= 9) {
124 | strDate = "0" + strDate;
125 | }
126 | var hour = date.getHours(); //获取当前小时数(0-23)
127 | if (hour >= 0 && hour <= 9) {
128 | hour = "0" + hour;
129 | }
130 | var min = date.getMinutes(); //获取当前分钟数(0-59)
131 | if (min >= 0 && min <= 9) {
132 | min = "0" + min;
133 | }
134 | var second = date.getSeconds(); //获取当前秒数(0-59)
135 | if (second >= 0 && second <= 9) {
136 | second = "0" + second;
137 | }
138 | var mill = date.getMilliseconds(); //获取当前毫秒数(0-999)
139 | if (mill >= 0 && mill <= 9) {
140 | mill = "00" + mill;
141 | } else if (mill >= 10 && mill <= 99) {
142 | mill = "0" + mill;
143 | }
144 | return year + month + strDate + hour + min + second + mill + "";
145 | }
146 |
147 | module.exports = util;
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AutoJsProject
2 | AutoJs实战项目,包含 AntForest(蚂蚁森林自动收能量)、TaoBaoMiaoBi(淘宝双11领喵币),以及其他练习项目;
3 |
4 | 你可以自己下载源码编译,亦可直接从本项目下载编译完成的APK;
5 |
6 | Github更新可能略慢于微信公众号,此外由于总所周知的原因,Github下载可能较慢,可前往公众号 zxiaofan 高速获取最新APK;
7 |
8 | # 1. AntForest(蚂蚁森林收能量)
9 | ## 1.1. 概要
10 | 2020年已更新;
11 |
12 | 2019年双11前夕,淘宝上线领喵币功能,凑个热闹,学习了AutoJS后,做了个自动领喵币的脚本,随后又做了个蚂蚁森林收能量的脚本;
13 |
14 | 本脚本持续更新;
15 |
16 | [基于AutoJs实现淘宝领喵币和蚂蚁森林能量自动化](https://blog.csdn.net/u010887744/article/details/102883137);
17 |
18 | ;
19 | ## 1.2. 支持功能
20 | - 支持 “收取蚂蚁森林能量”;
21 | - 支持 “收取蚂蚁森林能量自动浇水”;
22 | - 浇水支持设置阀值,达到阀值才浇水;
23 | - 支持 “支付宝会员签到领积分”;
24 | - 支持 “微信搜索指定公众号并关注”;
25 |
26 | ## 1.3. 更新记录
27 | - 20201101,
28 | - 支付宝更新了,我也跟着更新了;
29 | - 20201025,
30 | - 逻辑优化,支持最新版找能量;
31 | - 20201006,
32 | - 逻辑优化,支持逛一逛收能量;
33 | - 20200808,[点击下载](https://github.com/zxiaofan/AutoJsProject/releases/tag/v5.2.0);
34 | - 逻辑优化,避免重复进入同一个好友蚂蚁森林主页;
35 | - 支持新版浇水,66g>33g>18g>10g;
36 | - 20200726开源第一版,[点击下载](https://github.com/zxiaofan/AutoJsProject/releases/tag/v5.1.0);
37 | - 支持 “收取蚂蚁森林能量”;
38 | - 支持 “收取蚂蚁森林能量自动浇水”;
39 | - 浇水支持设置阀值,达到阀值才浇水;
40 | - 支持 “支付宝会员签到领积分”;
41 | - 支持 “微信搜索指定公众号并关注”;
42 |
43 | # 2. TaoBaoMiaoBi(淘宝领喵币)
44 | ## 2.1. 概要
45 | - 2020年双11,【天猫、淘宝、支付宝】一键领喵币再次来袭,已开源;
46 | - 2019年双11前夕,淘宝上线领喵币功能,凑个热闹,学习了AutoJS后,做了个自动领喵币的脚本,由于可能并不适用后续领喵币功能,暂不开源;
47 |
48 | [2020双十一AutoJs自动领喵币再次来袭【天猫、淘宝、支付宝】](https://zxiaofan.blog.csdn.net/article/details/109268275);
49 |
50 | 
51 |
52 | ## 2.2. 支持功能
53 | ## 2.3. 更新记录
54 | - 20201101,
55 | - 2020双十一,【天猫+淘宝】一键领喵币更新,下架支付宝喵币;
56 | - 20201024,
57 | - 2020双十一AutoJs自动领喵币再次来袭【天猫、淘宝、支付宝】;
58 | - 201911,
59 | - 2019年双十一,初版,暂不开源;
60 |
61 | ---
62 | >祝君好运!
63 | Life is all about choices!
64 | 将来的你一定会感激现在拼命的自己!
65 | 【[CSDN](https://blog.csdn.net/u010887744)】【[GitHub](https://github.com/zxiaofan)】【[OSCHINA](https://my.oschina.net/zxiaofan)】【[掘金](https://juejin.im/user/5b61e64df265da0f4d0d90f8/activities)】【[语雀](https://www.yuque.com/zxiaofan)】【[微信公众号](http://tc.zxiaofan.com/tc/zxiaofan_dyh.jpg)】
66 |
67 |
68 |
--------------------------------------------------------------------------------
/TaoBaoMiaoBi/AliMB.js:
--------------------------------------------------------------------------------
1 | // 支付宝工具箱
2 | var AliMB = {};
3 | var util = require("./util.js");
4 | // var main = require("./main_UI.js");
5 | var height = device.height;
6 | var width = device.width;
7 |
8 | // 收取天猫喵币
9 | AliMB.fun_TMMB = function fun_TMMB() {
10 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
11 | toastLog("请为此APP打开以下权限:无障碍服务权限、后台弹出界面");
12 | auto.waitFor();
13 | toastLog("打开天猫");
14 | setScreenMetrics(width, height);
15 | launch("com.tmall.wireless");
16 | sleep(4000);
17 | // waitForPackage("com.tmall.wireless");
18 | while (!atTMHome() && !在天猫喵币任务页面()) {
19 | toastLog("还没进入天猫主页呢...");
20 | sleep(2000);
21 | back();
22 | }
23 | toastLog("进入天猫首页,准备领喵币");
24 | count = 0;
25 | scrollUp();
26 | goto_tmmb();
27 |
28 | //注册音量下按下退出脚本监听
29 | util.registEvent();
30 | while (!在天猫喵币任务页面()) {
31 | toastLog("还没进入天猫喵币任务页面呢...");
32 | sleep(2000);
33 | }
34 | sleep(1000);
35 | toast("进入天猫喵币任务页面");
36 | scrollUp();
37 | scrollUp();
38 |
39 | getTM20000mb();
40 |
41 | sleep(1000);
42 |
43 | getTMMbByLiuLanDP();
44 |
45 | // toastLog("[屏幕分辨率]width:" + width + ";height:" + height);
46 |
47 |
48 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
49 |
50 | scrollUp();
51 | sleep(1000);
52 | // back();
53 | var info1 = "天猫领喵币完成";
54 | toastLog(info1);
55 | // exit();
56 | }
57 |
58 |
59 | // 收取支付宝喵币
60 | AliMB.fun_ZFBMB = function fun_ZFBMB() {
61 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
62 | toastLog("请为此APP打开以下权限:无障碍服务权限、后台弹出界面");
63 | auto.waitFor();
64 | toastLog("打开支付宝");
65 | setScreenMetrics(width, height);
66 | launch("com.eg.android.AlipayGphone");
67 | sleep(4000);
68 | // waitForPackage("com.eg.android.AlipayGphone");
69 | toastLog("进入支付宝首页,准备领喵币");
70 | scrollUp();
71 | scrollUp();
72 |
73 |
74 | //注册音量下按下退出脚本监听
75 | util.registEvent();
76 |
77 | while (!在支付宝底部界面() && !在支付宝喵币任务页面()) {
78 | toastLog("还没进入支付宝首页呢...");
79 | sleep(2000);
80 | // back();
81 | }
82 | goto_zfbmb();
83 | while (!在支付宝喵币任务页面()) {
84 | toastLog("还没进入支付宝喵币任务页面呢...");
85 | sleep(2000);
86 | }
87 | sleep(1000);
88 | toast("进入支付宝喵币任务页面");
89 | scrollUp();
90 | scrollUp();
91 | getTM20000mb();
92 |
93 | sleep(1000);
94 |
95 | getZFBMbByLiuLanDP();
96 |
97 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
98 |
99 | scrollUp();
100 | sleep(1000);
101 | var info1 = "支付宝领喵币完成";
102 | toastLog(info1);
103 | }
104 |
105 |
106 |
107 | // 收取淘宝喵币
108 | AliMB.fun_TBMB = function fun_TBMB() {
109 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
110 | toastLog("请为此APP打开以下权限:无障碍服务权限、后台弹出界面");
111 | auto.waitFor();
112 | toastLog("打开淘宝");
113 | setScreenMetrics(width, height);
114 | launch("com.taobao.taobao");
115 | sleep(4000);
116 | // waitForPackage("com.eg.android.AlipayGphone");
117 | toastLog("进入淘宝首页,准备领喵币");
118 | scrollUp();
119 | scrollUp();
120 |
121 |
122 | //注册音量下按下退出脚本监听
123 | util.registEvent();
124 |
125 | while (!在淘宝底部界面() && !在淘宝喵币任务页面()) {
126 | toastLog("还没进入淘宝首页呢...");
127 | sleep(2000);
128 | back();
129 | }
130 | goto_tbmb();
131 | while (!在淘宝喵币任务页面()) {
132 | toastLog("还没进入淘宝喵币任务页面呢...");
133 | sleep(2000);
134 | }
135 | sleep(1000);
136 | toast("进入淘宝喵币任务页面");
137 | scrollUp();
138 | scrollUp();
139 |
140 | sleep(1000);
141 |
142 | getTBMbByLiuLanDP();
143 |
144 | toastLog("Build By @zxiaofan,有问题请前往订阅号【zxiaofan】留言");
145 |
146 | scrollUp();
147 | sleep(1000);
148 | var info1 = "淘宝领喵币完成";
149 | toastLog(info1);
150 | }
151 |
152 |
153 | // 进入天猫喵币主页
154 | function goto_tmmb() {
155 | scrollUp();
156 | scrollUp();
157 | toastLog("【Start】准备天猫“天猫双十一,超级星秀猫”");
158 | sleep(1000);
159 | var x_cjxxm = 150;
160 | var y_cjxxm = 1300;
161 | toastLog("[坐标]超级星秀猫:" + x_cjxxm + "," + y_cjxxm);
162 | click(x_cjxxm, y_cjxxm);
163 | sleep(1000);
164 | }
165 |
166 | // 进入支付宝喵币主页
167 | function goto_zfbmb() {
168 | scrollUp();
169 | scrollUp();
170 | toastLog("【Start】准备支付宝“天猫双十一,超级星秀猫”");
171 | sleep(1000);
172 | var x_cjxxm = 500;
173 | var y_cjxxm = 600;
174 | toastLog("[坐标]超级星秀猫:" + x_cjxxm + "," + y_cjxxm);
175 | click(x_cjxxm, y_cjxxm);
176 | sleep(1000);
177 | }
178 |
179 | // 进入淘宝喵币主页
180 | function goto_tbmb() {
181 | scrollUp();
182 | scrollUp();
183 | toastLog("【Start】准备淘宝“天猫双十一,超级星秀猫”");
184 | sleep(1000);
185 | var x_cjxxm = 800;
186 | var y_cjxxm = 1300;
187 | toastLog("[坐标]超级星秀猫:" + x_cjxxm + "," + y_cjxxm);
188 | click(x_cjxxm, y_cjxxm);
189 | sleep(1000);
190 | }
191 |
192 | // 20000喵币点击领取
193 | function getTM20000mb() {
194 | toastLog("【Start】准备点击领取20000喵币");
195 | click("20000喵币点击领取");
196 | sleep(500);
197 | toastLog("【End】领取20000喵币");
198 | sleep(500);
199 |
200 | }
201 |
202 |
203 | // 支付宝签到领喵币
204 | function getZFBMbBySign() {
205 | toastLog("【Start】支付宝签到领喵币");
206 | click("签到");
207 | sleep(500);
208 | toastLog("【End】支付宝签到领喵币");
209 | sleep(500);
210 |
211 | }
212 |
213 | // 天猫浏览店铺领喵币
214 | function getTMMbByLiuLanDP() {
215 | toastLog("【Start】浏览店铺领喵币");
216 |
217 | x_llb = 950;
218 | y_llb = 1800;
219 | toastLog("[坐标]领喵币:" + x_llb + "," + y_llb);
220 | click(x_llb, y_llb);
221 | sleep(500);
222 |
223 | // 进入【领喵币中心】
224 | while (!在天猫领喵币中心页面()) {
225 | toastLog("还没进入天猫【领喵币中心】呢...");
226 | sleep(2000);
227 | }
228 |
229 | getTMMbjx();
230 | getTMMbQD();
231 | getTMMbQuLiuLan("去浏览", "天猫");
232 | getTMMbQuLiuLan("逛一逛", "天猫");
233 | getTMMbQuLiuLan("去完成", "天猫");
234 | getTMMbQuLiuLan("去施肥", "天猫");
235 | toastLog("【End】浏览店铺领喵币");
236 |
237 | }
238 |
239 | // 淘宝浏览店铺领喵币
240 | function getTBMbByLiuLanDP() {
241 | toastLog("【Start】浏览店铺领喵币");
242 |
243 | x_llb = 950;
244 | y_llb = 1800;
245 | toastLog("[坐标]领喵币:" + x_llb + "," + y_llb);
246 | click(x_llb, y_llb);
247 | sleep(500);
248 |
249 | // 进入【领喵币中心】
250 | while (!在淘宝领喵币中心页面()) {
251 | toastLog("还没进入淘宝【领喵币中心】呢...");
252 | sleep(2000);
253 | }
254 | click("开心收下,喵");
255 | getTMMbQuLiuLan("去浏览", "淘宝");
256 | getTMMbQuLiuLan("去观看", "淘宝");
257 | getTMMbQuLiuLan("去搜索", "淘宝");
258 | getTMMbQuLiuLan("去完成", "淘宝");
259 | toastLog("【End】浏览店铺领喵币");
260 |
261 | }
262 |
263 | // 支付宝浏览店铺领喵币
264 | function getZFBMbByLiuLanDP() {
265 | toastLog("【Start】支付宝浏览店铺领喵币");
266 | scrollUp();
267 | scrollUp();
268 | toastLog("[计算坐标]支付宝领喵币");
269 | sleep(200);
270 | x_llb = width - 100;
271 | y_llb = height - 100;
272 | click(x_llb, y_llb);
273 | sleep(500);
274 | var count = 5;
275 | // 进入【领喵币中心】
276 | while (!在支付宝领喵币中心页面() && count > 0) {
277 | toastLog("还没进入支付宝【领喵币中心】呢...");
278 | sleep(2000);
279 | x_llb = width - 100;
280 | y_llb = y_llb - 100;
281 | click(x_llb, y_llb);
282 | count--;
283 | }
284 | sleep(1000);
285 | getTMMbQD();
286 | click("好的,我知道了")
287 | getTMMbQuLiuLan("逛一逛", "支付宝");
288 | // getTMMbQuLiuLan("再逛逛", "支付宝");
289 | toastLog("【End】支付宝浏览店铺领喵币");
290 |
291 | }
292 |
293 | // 准备领惊喜喵币礼包
294 | function getTMMbjx() {
295 | toastLog("【Start】准备领惊喜喵币礼包");
296 | click("领取");
297 | sleep(500);
298 | click("领取奖励");
299 | toastLog("【End】领惊喜喵币礼包");
300 | sleep(500);
301 | click("领取奖励");
302 | }
303 |
304 | // 每日签到领喵币
305 | function getTMMbQD() {
306 | toastLog("【Start】准备每日签到领喵币");
307 | click("签到");
308 | sleep(500);
309 | click("签到");
310 | toastLog("【End】每日签到领喵币");
311 | sleep(500);
312 | }
313 |
314 | // 去浏览领喵币
315 | // sign:去浏览;去完成
316 | function getTMMbQuLiuLan(sign, source) {
317 | toastLog("【GoGoGo】" + source);
318 | toastLog("【Start】准备去【" + sign + "]浏览店铺领喵币");
319 | var count = 0;
320 | var countMax = 30;
321 | if ("逛一逛" == sign) {
322 |
323 | var hasC = checkHasCompleteByNum(sign);
324 | if (isCom) {
325 | return;
326 | }
327 | if ("天猫" == source) {
328 | countMax = 2;
329 | }
330 | } else if ("去施肥" == sign) {
331 | countMax = 1;
332 | }
333 | while (count < countMax) {
334 | click("好的,我知道了");
335 | click("开心收下,喵");
336 | click("领取奖励");
337 | sleep(1000);
338 | var 去浏览 = textContains(sign).findOnce();
339 | if ("去完成" == sign) {
340 | // UiSelector.boundsInside(left, top, right, buttom)
341 | 去浏览 = textContains(sign).boundsInside(0, device.height / 2, device.width, device.height).findOnce();
342 | }
343 | // log("[去浏览]:" + 去浏览);
344 | if (去浏览 == null) {
345 | if ("支付宝" == source && !在支付宝领喵币中心页面()) {
346 | toastLog("支付宝-继续向上返回");
347 | back();
348 | sleep(2000);
349 | click("好的,我知道了");
350 | 去浏览 = textContains(sign).findOnce();
351 | }
352 | if ("淘宝" == source && !在淘宝领喵币中心页面()) {
353 | toastLog("淘宝-继续向上返回");
354 | back();
355 | sleep(2000);
356 | click("好的,我知道了");
357 | 去浏览 = textContains(sign).findOnce();
358 | }
359 | if ("天猫" == source && !在天猫领喵币中心页面()) {
360 | toastLog("天猫-继续向上返回");
361 | back();
362 | sleep(2000);
363 | click("好的,我知道了");
364 | 去浏览 = textContains(sign).findOnce();
365 | }
366 | if (去浏览 == null) {
367 | toastLog("浏览店铺领喵币/能量已完成");
368 | break;
369 | }
370 | }
371 | count++;
372 | toastLog("[" + sign + ":]" + count);
373 | click(sign);
374 | sleep(1000);
375 | util.swipeDown();
376 | sleep(100);
377 | if ("去施肥" == sign) {
378 | getTMMBByNongChang();
379 | return;
380 | }
381 |
382 | tjmb();
383 | shopSign();
384 |
385 |
386 | var isCom = checkHasComplete();
387 | if (isCom) {
388 | break;
389 | }
390 |
391 | sleep(2000);
392 |
393 | var isTbTj = isTbTeJia();
394 | if (isTbTj) {
395 | back();
396 | continue;
397 | }
398 |
399 | util.swipeUp();
400 | sleep(1000);
401 |
402 | var isCom = checkHasComplete();
403 | if (isCom) {
404 | break;
405 | }
406 |
407 |
408 | util.swipeUp();
409 | toastLog("[等待滑动15秒领取喵币/能量1 ing...]");
410 | sleep(3000);
411 |
412 | var isCom = checkHasComplete();
413 | if (isCom) {
414 | break;
415 | }
416 | sleep(5000);
417 | if (!在直播界面()) {
418 | util.swipeDown();
419 | toastLog("[等待滑动15秒领取喵币/能量2 ing...]");
420 | util.swipeDown();
421 | }
422 | // desc 任务完成
423 | sleep(9000);
424 | if (text("全部").exists() && desc("搜索").exists()) {
425 | toastLog("上滑再次进入领喵币/能量主页");
426 | scrollUp();
427 | sleep(200);
428 | scrollUp();
429 | sleep(200);
430 | scrollUp();
431 | scrollUp();
432 | sleep(200);
433 | scrollUp();
434 | } else {
435 | toastLog("返回领喵币/能量主页");
436 | back();
437 | sleep(1000);
438 | if ("天猫" == source && !在天猫领喵币中心页面()) {
439 | toastLog("目前没有在天猫领喵币/能量中心了呢,逛店铺领喵币/能量结束");
440 | sleep(1000);
441 | }
442 | if ("支付宝" == source && !在支付宝领喵币中心页面()) {
443 | toastLog("目前没有在支付宝领喵币/能量中心了呢,逛店铺领喵币/能量结束");
444 | sleep(1000);
445 | }
446 | if ("淘宝" == source && !在淘宝领喵币中心页面()) {
447 | toastLog("目前没有在淘宝领喵币/能量中心了呢,逛店铺领喵币/能量结束");
448 | sleep(1000);
449 | }
450 | }
451 |
452 | }
453 | toastLog("已浏览店铺:" + count);
454 | sleep(1000);
455 | toastLog("【End】去浏览店铺领喵币");
456 |
457 | }
458 |
459 |
460 | function getTMMBByNongChang() {
461 | toastLog("准备去施肥");
462 | var count = 0;
463 | // 可能某些用户没启用芭比农场
464 | while (!atTMNongChang() && count < 5) {
465 | toastLog("还没进入芭比农场页面呢...");
466 | sleep(2000);
467 | count++;
468 | }
469 | if (count >= 5) {
470 | return;
471 | }
472 | toastLog("进入芭比农场页面了...");
473 | var 集肥料 = text("gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==").indexInParent(6).findOnce();
474 | if (null == 集肥料) {
475 | toastLog("【计算坐标】无法定位到集肥料...");
476 | }
477 | var x_shifei = width / 2;
478 | var y_shifei = 集肥料.bounds().centerY();
479 | sleep(500);
480 | toastLog("【坐标】集肥料>施肥:" + x_shifei + "," + y_shifei);
481 | click(x_shifei, y_shifei);
482 | sleep(1000);
483 | toastLog("完成施肥领喵币");
484 | back();
485 | }
486 |
487 | // 通过数字判断是否已经完成:逛一逛
488 | function checkHasCompleteByNum(sign) {
489 | var guangyiguangText = textContains(sign).className("android.view.View").findOnce();
490 | if (null != guangyiguangText) {
491 | guangyiguangTextDesc = guangyiguangText.getText() + "";
492 | toastLog("【逛一逛】" + guangyiguangTextDesc);
493 | if (null != guangyiguangTextDesc) {
494 | var aa = guangyiguangTextDesc.substr(guangyiguangTextDesc.indexOf("\("), guangyiguangTextDesc.indexOf("\)"));
495 | if (null != aa) {
496 | var a1 = aa.substr(0, aa.indexOf("\/"));
497 | var a2 = aa.substr(aa.indexOf("\/") + 1, aa.length);
498 | toastLog("【逛一逛】情况" + a1 + "," + a2);
499 | if (a1 = a2) {
500 | toastLog("【逛一逛】已领取完毕");
501 | return true;
502 | }
503 | }
504 | }
505 | }
506 | return false;
507 | }
508 |
509 |
510 | function checkHasComplete() {
511 | if (desc("今日已经").exists() && desc("全部完成啦").exists()) {
512 | toastLog("此任务今日已经全部完成啦");
513 | return true;
514 | }
515 | return false;
516 | }
517 |
518 | function shopSign() {
519 | sleep(500);
520 | if (desc("签到领喵币").exists()) {
521 | toastLog("店铺签到领喵币ing...");
522 | sleep(1000);
523 | desc("签到领喵币").findOnce().parent().click();
524 | sleep(1000);
525 | desc("开心收下").findOnce().click();
526 | toastLog("完成店铺签到领喵币");
527 | }
528 | }
529 |
530 | function tjmb() {
531 | // 领取天降喵币
532 | if (text("直接收下").exists()) {
533 | toastLog("领取天降喵币");
534 | click("直接收下");
535 | sleep(1000);
536 | }
537 | }
538 |
539 | function 在天猫喵币任务页面() {
540 | if (textContains("天猫双十一,超级星秀猫").exists()) {
541 | return true;
542 | } else {
543 | return false;
544 | }
545 | }
546 |
547 | function 在支付宝喵币任务页面() {
548 | if (textContains("天猫双十一,超级星秀猫").exists()) {
549 | return true;
550 | } else {
551 | return false;
552 | }
553 | }
554 |
555 | function 在天猫领喵币中心页面() {
556 | if (textContains("累计任务奖励").exists()) {
557 | return true;
558 | } else {
559 | return false;
560 | }
561 | }
562 | function 在支付宝领喵币中心页面() {
563 | if (textContains("连续签到得").exists()) {
564 | return true;
565 | } else {
566 | return false;
567 | }
568 | }
569 |
570 | function 在淘宝领喵币中心页面() {
571 | if (textContains("累计任务奖励").exists()) {
572 | return true;
573 | } else {
574 | return false;
575 | }
576 | }
577 |
578 | // 确保在天猫首页
579 | function atTMHome() {
580 | if (text("购物车").exists()) {
581 | return true;
582 | } else {
583 | return false;
584 | }
585 | }
586 |
587 | // 确保在天猫农场界面
588 | function atTMNongChang() {
589 | // 集肥料
590 | if (text("gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==").exists()) {
591 | return true;
592 | } else {
593 | return false;
594 | }
595 | }
596 |
597 | function 在支付宝底部界面() {
598 | if (text("我的").exists() && text("首页").exists()) {
599 | return true;
600 | } else {
601 | return false;
602 | }
603 | }
604 |
605 | function 在淘宝底部界面() {
606 | if (desc("搜索").exists()) {
607 | return true;
608 | } else {
609 | return false;
610 | }
611 | }
612 |
613 | function 在淘宝喵币任务页面() {
614 | if (textContains("天猫双十一,超级星秀猫").exists()) {
615 | return true;
616 | } else {
617 | return false;
618 | }
619 | }
620 |
621 |
622 | function 在直播界面() {
623 | if (idContains("taolive_").exists()) {
624 | return true;
625 | } else {
626 | return false;
627 | }
628 | }
629 |
630 | function isTbTeJia() {
631 | if (textContains("淘宝特价版送红包").exists()) {
632 | return true;
633 | } else {
634 | return false;
635 | }
636 | }
637 | module.exports = AliMB;
--------------------------------------------------------------------------------
/TaoBaoMiaoBi/main_UIMB.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var height = device.height;
3 | var width = device.width;
4 | var version = "202010311800";
5 | var versionDesc = "2020双十一,【天猫+淘宝】一键领喵币更新,下架支付宝喵币";
6 |
7 | var main = {};
8 | ui.layout(
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {/*
21 |
22 | */}
23 |
24 | {/* */}
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | );
37 | toastLog(ui.kj_aboutThis.getText());
38 |
39 | // engines.execScriptFile("main_ant_miaobi.js");
40 | var module_main_funMB = require("./main_funMB.js");
41 | var module_util = require("./util.js");
42 |
43 | initData();
44 | this.fun_checkUpdate(version);
45 |
46 | ui.kj_findMe.click(() => {
47 |
48 | threads.start(function () {
49 | let info = "程序将【自动】打开微信,搜索订阅号zxiaofan,\n\n" +
50 | " 你可以在这里联系我哟。";
51 | // toastLog(info);
52 | var result = dialogs.confirm(info);
53 | // var result = true;
54 | if (result) {
55 | var dyh = "zxiaofan";
56 | setClip(dyh);
57 | module_main_funMB.findMe(dyh);
58 | } else {
59 | toastLog("你也可以手动前往公众号搜索zxiaofan找我");
60 | }
61 | });
62 | });
63 |
64 |
65 |
66 | ui.kj_openConsole.click(() => {
67 |
68 | threads.start(function () {
69 | let info = "是否确认打开日志窗口?\n\n" +
70 | "如果日志窗口区域有点击操作,请勿打开日志窗口。";
71 |
72 | var result = dialogs.confirm(info);
73 | if (result) {
74 | console.show();
75 | // console.setPosition(0, 0);
76 | // console.setSize(100, 50);
77 | toastLog("打开日志窗口");
78 | } else {
79 | toastLog("取消打开日志窗口");
80 | }
81 | });
82 | });
83 |
84 |
85 | ui.kj_closeConsole.click(() => {
86 |
87 | threads.start(function () {
88 | toastLog("关闭日志窗口");
89 | console.hide();
90 | });
91 | });
92 |
93 |
94 | ui.kj_clearLog.click(() => {
95 |
96 | threads.start(function () {
97 | toastLog("清理日志");
98 | console.clear();
99 | });
100 | });
101 |
102 |
103 | ui.kj_resetParam.click(() => {
104 |
105 | toastLog("恢复默认参数配置");
106 | module_util.clearStorage();
107 |
108 | });
109 |
110 |
111 | ui.kj_about.click(() => {
112 | let info = "" +
113 | "1、APP需要打开以下权限:无障碍服务权限、后台弹出界面;\n\n" +
114 | " 权限必须提前打开,否则可能执行失败;\n\n" +
115 | " 权限必须提前打开!!!\n\n" +
116 | "2、更新说明:20201031【天猫+淘宝】一键领喵币 更新啦;\n\n" +
117 | "5、【日志】:\n" +
118 | " 5.1、如果使用有bug,可在使用后“打开日志窗口”,分析日志;\n\n" +
119 | "6、作者:公众号【zxiaofan】";
120 |
121 | // dialogs.confirm(info);
122 | dialogs.build({
123 | title: "使用说明",
124 | content: info
125 | }
126 | ).show();
127 | });
128 |
129 |
130 |
131 | ui.kj_checkUpdate.click(() => {
132 | // log("main_ant_miaobi:" + module_main_ant_miaobi);
133 | this.fun_checkUpdate(version);
134 | // exit();
135 | });
136 |
137 |
138 | // 一条龙
139 | ui.kj_all.click(() => {
140 | toastLog("一条龙Starting...");
141 |
142 | var thread = threads.start(function () {
143 | var res;
144 | if (ui.kj_select_TMMB.isChecked()) {
145 | // 天猫猫币
146 | toastLog("[UI]天猫喵币");
147 |
148 | res = module_main_funMB.main_method("天猫喵币", true);
149 | }
150 | // if (ui.kj_select_ZFBMB.isChecked()) {
151 | // // 支付宝猫币
152 | // toastLog("[UI]支付宝喵币");
153 | // res = module_main_funMB.main_method("支付宝喵币", true);
154 | // }
155 |
156 | if (ui.kj_select_TBMB.isChecked()) {
157 | // 淘宝猫币
158 | toastLog("[UI]淘宝喵币");
159 | res = module_main_funMB.main_method("淘宝猫币", true);
160 | }
161 | res.blockedGet();
162 |
163 | toastLog("[End] 一条龙处理完毕");
164 |
165 | dialogs.confirm("喵币已为您领取完毕,请查收;最新版APP请前往公众号【zxiaofan】留言“喵币”获取");
166 |
167 | });
168 | // thread.join(); // 会卡死的,可能使无障碍服务失效,需要重启手机
169 |
170 | });
171 |
172 | function showConsole() {
173 | console.hide()
174 | sleep(200);
175 | console.show();
176 | // console.setSize(500, 300);
177 | console.setPosition(20, device.height - 900);
178 | };
179 |
180 | ui.kj_close.click(() => {
181 | engines.stopAllAndToast();
182 | ui.finish();
183 | exit();
184 | });
185 |
186 |
187 | ui.kj_gotoGitHub.click(() => {
188 | app.openUrl("https://github.com/zxiaofan/AutoJsProject");
189 | });
190 |
191 | function fun_checkUpdate(version) {
192 | var thread = threads.start(function () {
193 | var updateResult = module_main_funMB.checkUpdate(version);
194 | // toastLog("fun_checkUpdate:" + updateResult);
195 | if (updateResult != "") {
196 | ui.kj_checkUpdate.setText("【检查更新】APP已更新,赶紧使用最新版吧");
197 | } else {
198 | ui.kj_checkUpdate.setText("【检查更新】");
199 | }
200 | });
201 | }
202 |
203 | function initData() {
204 | // var storage = storages.create("zxiaofan:ant");
205 | module_util.getUid("miaobi");
206 | }
207 | function resetUIData() {
208 | var storage = storages.create("zxiaofan:ant");
209 |
210 | ui.kj_waterThreshold.setText("30");
211 | ui.kj_waterPlanNum.setText("10");
212 |
213 | ui.kj_waterMinUnit.setText("10");
214 |
215 | ui.kj_friendXmax.setText("900");
216 |
217 | ui.kj_friendYmax.setText("810");
218 |
219 | }
220 |
221 |
222 | // context.exports = main;
--------------------------------------------------------------------------------
/TaoBaoMiaoBi/main_funMB.js:
--------------------------------------------------------------------------------
1 | var versionUrl = "http://zxiaofan.com/tc/b/201911/mbversion.txt";
2 | var height = device.height;
3 | var width = device.width;
4 | var count = 0;
5 | var countmax = 100;
6 |
7 | var util = require("./util.js");
8 | var AliMB = require("./AliMB.js");
9 |
10 | var main_funMB = {};
11 |
12 | // 联系我
13 | main_funMB.findMe = function findMe(dyh) {
14 | var thread = threads.start(function () {
15 | findMeFun(dyh, false);
16 | });
17 | return thread;
18 | };
19 |
20 | // 检查更新
21 | // checkUpdate 没有括号
22 | main_funMB.checkUpdate = function checkUpdate(version) {
23 | // var thread = threads.start(function () {
24 | // checkUpdateFun(version);
25 | // });
26 | // toastLog(thread);
27 | // return thread;
28 | var checkRes = checkUpdateFun(version);
29 | return checkRes;
30 | };
31 |
32 |
33 | main_funMB.main_method = function main_method(method, boolThread) {
34 | if ("天猫喵币" == method) {
35 | toastLog("[fun]" + method);
36 | if (boolThread) {
37 | var dis_result1 = threads.disposable();
38 | var thread = threads.start(function () {
39 | AliMB.fun_TMMB();
40 | dis_result1.setAndNotify(1);
41 | });
42 |
43 | dis_result1.blockedGet()
44 | return dis_result1;
45 | } else {
46 | AliMB.fun_TMMB();
47 | }
48 | } else if ("支付宝喵币" == method) {
49 | toastLog("[fun]" + method);
50 |
51 | if (boolThread) {
52 | var dis_result2 = threads.disposable();
53 | var thread = threads.start(function () {
54 | AliMB.fun_ZFBMB();
55 | dis_result2.setAndNotify(1);
56 | });
57 | dis_result2.blockedGet()
58 | return dis_result2;
59 | } else {
60 | AliMB.fun_ZFBMB();
61 | }
62 | } else if ("淘宝猫币" == method) {
63 | toastLog("[fun]" + method);
64 |
65 | if (boolThread) {
66 | var dis_result3 = threads.disposable();
67 | var thread = threads.start(function () {
68 | AliMB.fun_TBMB();
69 | dis_result3.setAndNotify(1);
70 | });
71 | dis_result3.blockedGet()
72 | return dis_result3;
73 | } else {
74 | AliMB.fun_TBMB();
75 | }
76 | }
77 | }
78 |
79 | function checkUpdateFun(version) {
80 | var response = null;
81 | toastLog("检查更新中");
82 | // toastLog("获取新版本号:" + versionUrl);
83 | threads.start(function () {
84 | var reqUrl = versionUrl;
85 | if (reqUrl.indexOf("zxiaofan") > -1) {
86 | reqUrl += "?version=" + version + "?uid=" + util.getUid("miaobi");
87 | }
88 | var r = http.get(reqUrl, {}, function (res, err) {
89 | if (err) {
90 | console.error(err);
91 | return;
92 | }
93 | response = res;
94 | });
95 | });
96 | let timeOutTimes = 20;
97 | for (let i = 0; i < timeOutTimes; i++) {
98 | if (response == null) {
99 | sleep(200);
100 | if (i > 2) {
101 | toastLog("查询最新版本ing:" + i);
102 | }
103 | } else {
104 | break;
105 | }
106 | }
107 | var versionEsc = null;
108 | // toastLog("response:" + response);P
109 | if (response.statusCode >= 200 && response.statusCode <= 304) {
110 | versionEsc = response.body.string();
111 | } else {
112 | toastLog("检查更新失败,请前往订阅号zxiaofan回复关键字【喵币】获取最新版APP");
113 | }
114 |
115 | sleep(2000);
116 | var info = "";
117 | if (version.length >= 12 && versionEsc.length >= 12 && version.substring(0, 12) == versionEsc.substring(0, 12)) {
118 | toastLog("当前已是最新版");
119 | } else {
120 | toastLog("【当前版本】" + version + ";【服务器版本】" + versionEsc);
121 | info = "APP已更新,请前往订阅号zxiaofan回复关键字【喵币】获取最新版APP:" + versionEsc;
122 | dialogs.confirm(info);
123 | }
124 | return info;
125 | };
126 |
127 |
128 | function findMeFun(dyh, autoGuanzhu) {
129 | sleep(500);
130 | toastLog("打开微信搜索 " + dyh);
131 | launch("com.tencent.mm");
132 | sleep(1000);
133 | waitForPackage("com.tencent.mm");
134 | // logKJInfo(搜索);
135 | toastLog("点击搜索...");
136 | var 微信头 = textStartsWith("微信(").findOnce();
137 | var inttemp = 0;
138 | while (inttemp < 4 && null == 微信头) {
139 | toastLog("当前不在微信首页");
140 | back();
141 | inttemp++;
142 | sleep(1000);
143 | 微信头 = textStartsWith("微信(").findOnce();
144 | }
145 | // logKJInfo(微信头);
146 |
147 | for (var col = device.width / 2; col < device.width; col += 100) {
148 | var clickResult = click(col, 微信头.bounds().centerY());
149 | if (!textStartsWith("微信(").exists()) {
150 | sleep(500);
151 | toastLog("进入搜索...");
152 | break;
153 | }
154 | sleep(50);
155 | }
156 |
157 |
158 | sleep(1000);
159 | var 搜索框 = className("android.widget.EditText").findOnce();
160 | if (null != 搜索框) {
161 | 搜索框.setText(dyh);
162 | click("搜一搜 " + dyh);
163 | sleep(600);
164 | var factor = 13;
165 | util.swipeAuto(0.5, 0.4, 0.5, 0.2, factor);
166 | scrollUp();
167 | sleep(600);
168 | util.swipeAuto(0.5, 0.4, 0.5, 0.2, factor);
169 | util.swipeAuto(0.5, 0.6, 0.5, 0.2, factor);
170 | var 搜索zxf = textStartsWith("搜一搜").textEndsWith(dyh).findOne(1000);
171 | // logKJInfo(搜索zxf);
172 | util.clickByKJBounds(搜索zxf);
173 |
174 | sleep(600);
175 | text(dyh).waitFor();
176 | sleep(1500);
177 | if (!textContains("公众号").findOnce()) {
178 | sleep(1000);
179 | }
180 | if (!textContains("公众号").findOnce()) {
181 | sleep(1000);
182 | }
183 | if (!textContains("公众号").findOnce()) {
184 | sleep(1000);
185 | }
186 | toastLog("点击公众号" + dyh);
187 | click("公众号", 0);
188 | sleep(1000);
189 | var kj_dyh = text(dyh).findOnce();
190 | if (null != kj_dyh) {
191 | toastLog("点击公众号.." + dyh);
192 | kj_dyh.parent().click();
193 | }
194 | sleep(1000);
195 |
196 | if (autoGuanzhu) {
197 | click("关注公众号");
198 | } else if (!textContains("不再关注").findOnce()) {
199 | toastLog("还没关注" + dyh + "?\n赶紧和你的朋友一起关注吧");
200 | }
201 | }
202 | }
203 |
204 |
205 | function fun_getTaoBaoNengLiang_main() {
206 | // 历史版本暂不开源,今年双11开源
207 | }
208 |
209 |
210 | function quliulan() {
211 | // 历史版本暂不开源,今年双11开源
212 |
213 | }
214 |
215 | function shopSign() {
216 | // 历史版本暂不开源,今年双11开源
217 | }
218 |
219 | function tjmb() {
220 | // 领取天降喵币
221 | // 历史版本暂不开源,今年双11开源
222 | }
223 | function getOwnMiaoBi() {
224 | sleep(1000);
225 |
226 | }
227 |
228 | module.exports = main_funMB;
--------------------------------------------------------------------------------
/TaoBaoMiaoBi/util.js:
--------------------------------------------------------------------------------
1 | var util = {};
2 |
3 |
4 | // 点击元素的中心位置
5 | util.clickByKJBounds = function clickByKJBounds(kj) {
6 | if (kj == null) {
7 | return false;
8 | }
9 | var result = false;
10 | try {
11 | click(kj.bounds().centerX(), kj.bounds().centerY());
12 | result = true;
13 | } catch (e) {
14 |
15 | };
16 | return result;
17 | }
18 |
19 | // 自动模拟滑动(随机因子)
20 | util.swipeAuto = function swipeAuto(x1factor, y1factor, x2factor, y2factor, factor) {
21 | swipe(device.width * x1factor + parseInt(random() * factor), device.height * y1factor + parseInt(random() * factor), device.width * x2factor + parseInt(random() * factor), device.height * y2factor + parseInt(random() * factor), 600);
22 | }
23 |
24 | // 看下面的数据
25 | util.swipeDown = function swipeDown() {
26 | var factor = 53;
27 | swipe(device.width / 2 + parseInt(random() * factor), device.height / 4 * 3 + parseInt(random() * factor), device.width / 2 + parseInt(random() * factor), device.height / 5 + parseInt(random() * factor), 600);
28 | }
29 |
30 |
31 |
32 | /** swipe(x1, y1, x2, y2, duration)
33 | x1 {number} 滑动的起始坐标的x值
34 | y1 {number} 滑动的起始坐标的y值
35 | x2 {number} 滑动的结束坐标的x值
36 | y2 {number} 滑动的结束坐标的y值
37 | duration {number} 滑动时长,单位毫秒
38 | */
39 |
40 | // 看上面的数据
41 | util.swipeUp = function swipeUp() {
42 | var factor = 57;
43 | swipe(device.width / 2 + parseInt(random() * factor), device.height / 4 + parseInt(random() * factor), device.width / 2 + parseInt(random() * factor), device.height / 5 * 4 + parseInt(random() * factor), 600);
44 | }
45 |
46 |
47 | /**
48 | * 设置按键监听 当脚本执行时候按音量减 退出脚本
49 | */
50 | util.registEvent = function registEvent() {
51 | //启用按键监听
52 | events.observeKey();
53 | //监听音量下键按下
54 | events.onKeyDown("volume_down", function (event) {
55 | toastLog("音量下键被按下了");
56 | exit();
57 | });
58 | }
59 |
60 | /**
61 | * 获取指定应用数据
62 | */
63 | util.getStorage = function getStorage(key) {
64 | var storage = storages.create("zxiaofan:ant");
65 | // console.log("storages:"+storage.get(key) );
66 |
67 | return storage.get(key);
68 | }
69 |
70 | util.clearStorage = function clearStorage() {
71 | var storage = storages.create("zxiaofan:ant");
72 | return storage.clear();
73 | }
74 |
75 | util.readFile = function readFile(filePath) {
76 | var content = "NULL";
77 | try {
78 | content = files.read(filePath);
79 | } catch (error) {
80 | log(error);
81 | }
82 | return content;
83 | }
84 |
85 | util.createUid = function createUid(sign) {
86 | var random1 = random(10, 999);
87 | if (random1 < 99) {
88 | random1 = "0" + random1;
89 | }
90 | return sign + "uid" + this.getYYYYMMddHHmmssS() + random1;
91 | }
92 |
93 |
94 | util.getUid = function getUid(sign) {
95 | var storage = storages.create("zxiaofan:" + sign);
96 | var uid = storage.get("uid");
97 | if (uid) {
98 | return uid;
99 | }
100 | var cachePath = "/sdcard/" + sign + "/cache.txt";
101 | uid = this.readFile(cachePath);
102 | if (uid != "" && uid != "NULL") {
103 | storage.put("uid", uid);
104 | return uid;
105 | }
106 | uid = this.createUid(sign);
107 | storage.put("uid", uid);
108 | files.createWithDirs(cachePath);
109 | files.write(cachePath, uid);
110 | return uid;
111 | }
112 |
113 |
114 | util.getYYYYMMddHHmmssS = function getYYYYMMddHHmmssS() {
115 | var date = new Date();
116 | var year = date.getFullYear();
117 | var month = date.getMonth() + 1;
118 |
119 | if (month >= 1 && month <= 9) {
120 | month = "0" + month;
121 | }
122 | var strDate = date.getDate();
123 | if (strDate >= 0 && strDate <= 9) {
124 | strDate = "0" + strDate;
125 | }
126 | var hour = date.getHours(); //获取当前小时数(0-23)
127 | if (hour >= 0 && hour <= 9) {
128 | hour = "0" + hour;
129 | }
130 | var min = date.getMinutes(); //获取当前分钟数(0-59)
131 | if (min >= 0 && min <= 9) {
132 | min = "0" + min;
133 | }
134 | var second = date.getSeconds(); //获取当前秒数(0-59)
135 | if (second >= 0 && second <= 9) {
136 | second = "0" + second;
137 | }
138 | var mill = date.getMilliseconds(); //获取当前毫秒数(0-999)
139 | if (mill >= 0 && mill <= 9) {
140 | mill = "00" + mill;
141 | } else if (mill >= 10 && mill <= 99) {
142 | mill = "0" + mill;
143 | }
144 | return year + month + strDate + hour + min + second + mill + "";
145 | }
146 |
147 | module.exports = util;
--------------------------------------------------------------------------------