├── .gitignore
├── README.md
├── SUMMARY.md
├── addUI.js
├── docs
├── .nojekyll
├── README.md
└── index.html
├── index.html
├── package-lock.json
├── package.json
├── resources
├── Screenshot_20190810-183903.png
├── Screenshot_20190810-183918.png
├── Screenshot_20190810-190455.png
├── Screenshot_20190810-222249.png
├── Screenshot_20190810-222256.png
├── Screenshot_20190810-222839.png
├── Screenshot_20190810-223143.png
├── Screenshot_20190810-223208.png
├── Screenshot_20190810-223220.png
├── Screenshot_20190810-223233.png
├── Screenshot_20190810-223315.png
├── Screenshot_20190810-223336.png
├── Screenshot_20190810-223416.png
├── Screenshot_20190810-223427.png
├── Screenshot_20190810-223640.png
├── Screenshot_20190811-005736.png
├── Screenshot_20190811-142627.png
├── Screenshot_20190811-142645.png
├── Screenshot_20190811-143126.png
├── Screenshot_20190811-144305.png
├── Screenshot_20190811-144454.png
├── Screenshot_20190811-145459.png
├── Screenshot_20190811-153009.png
├── Screenshot_20190811-170849.png
├── Screenshot_20190811-215140.png
├── autojs_01.png
└── template
│ ├── base64.txt
│ ├── weiboqianbao_hong.png
│ ├── zhaoqidaka.png
│ ├── 微博文字.png
│ ├── 微博钱包LOGO.png
│ └── 微博钱包文字.png
├── src
├── common
│ ├── api.js
│ ├── operate.js
│ ├── sms.js
│ ├── utils.js
│ └── work.js
├── env.js
├── index.js
├── layout.xml
└── work
│ ├── test.js
│ ├── 云闪付-签到.js
│ ├── 叮咚买菜-签到.js
│ ├── 微博-登录.js
│ ├── 拼多多-签到.js
│ ├── 新浪微博-早起打卡.js
│ ├── 百度地图-签到.js
│ └── 网易邮箱-注册.js
├── tools
├── image2base64
└── image2base64.py
├── webpack.config.js
├── webpack.development.config.js
└── webpack.production.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | #
2 | dist
3 | dist/
4 | */.DS_Store
5 |
6 | # Logs
7 | logs
8 | *.log
9 | npm-debug.log*
10 | yarn-debug.log*
11 | yarn-error.log*
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # Typescript v1 declaration files
45 | typings/
46 |
47 | # Optional npm cache directory
48 | .npm
49 |
50 | # Optional eslint cache
51 | .eslintcache
52 |
53 | # Optional REPL history
54 | .node_repl_history
55 |
56 | # Output of 'npm pack'
57 | *.tgz
58 |
59 | # Yarn Integrity file
60 | .yarn-integrity
61 |
62 | # dotenv environment variables file
63 | .env
64 |
65 | _book/
66 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 基于AutoJs的安卓自动化测试脚本框架(AutoJson)
2 | ## 简介
3 | 本程序是一个AutoJs的脚本框架,实现只需要修改JSON配置文件,就能自定义操作流程。已实现微博自动注册,远程获取内容,自动发微博等功能!新增加网易163邮箱注册,抖音注册、点赞!!
4 | 正在实现【百度地图签到、大众点评签到、叮咚买菜签到、拼多多签到、什么值得买签到、苏宁易购签到、淘宝签到淘金币、微信读书(TODO)、小米商城抢购web(TODO)、云闪付签到积分、支付宝签到积分、支付宝每日花呗红包、支付宝体育服务早期打卡】android autojs 注册登陆签到脚本
5 | ### 项目地址:
6 | 【https://github.com/bayson/autojs】
7 | ### Release:
8 | 【https://github.com/bayson/autojs-release】
9 |
10 | ## 必备条件
11 | 1. webpack基于nodejs,电脑上必须安装nodejs.
12 | 2. 安卓上安装AutoJs的App: [https://github.com/hyb1996/Auto.js] AutoJs帮助文档:[https://hyb1996.github.io/AutoJs-Docs/]
13 | ## 注意事项
14 | 1.
15 | ## 编译步骤
16 | 1. git clone https://github.com/bayson/autojs.git
17 | 2. cd autojs
18 | 3. npm i
19 | 4. npm run build
20 | 5. 复制 ./dist/新浪微博.js , ./dist/网易邮箱.js 到你的AutoJs脚本目录默认是:/sdcard/脚本/
21 | ## 使用说明
22 | 欢迎使用和提交bug反馈
23 | * 【设备要求】:
24 | * 1.需要root
25 | * 2.安卓5.0以上
26 | * 3.Auto.js软件版本4.0以上
27 |
28 |

29 |
30 |
31 | ### 网易邮箱-注册
32 | * 1.将脚本 ./dist/网易邮箱-注册.js 复制到AutoJs脚本目录下,默认目录是:/sdcard/脚本/
33 | * 2.启动QQ浏览器,并打开网址 https://mail.163.com , 再启动脚本"网易邮箱-注册"即可,脚本如不会启动请参考AutoJs的文档
34 | * 3.邮箱注册会自动运行,如果遇到不能识别的页面手动点击就可以
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 |
67 | * 注册采用的QQ浏览器版本号
68 | 
69 |
70 |
71 | ### 百度地图-签到
72 | * 1.将脚本 ./dist/百度地图-签到.js 复制到AutoJs脚本目录下,默认目录是:/sdcard/脚本/
73 | * 2.直接启动脚本"百度地图-签到"即可,
74 | * 3.如果遇到不能识别的页面手动点击就可以
75 |
76 | 
77 |
78 | 
79 |
80 |
81 | 
82 |
83 |
84 |
85 | ### 叮咚买菜-签到
86 | * 1.将脚本 ./dist/叮咚买菜-签到.js 复制到AutoJs脚本目录下,默认目录是:/sdcard/脚本/
87 | * 2.直接启动脚本"叮咚买菜-签到"即可,
88 | * 3.如果遇到不能识别的页面手动点击就可以
89 |
90 | 
91 |
92 | 
93 |
94 |
95 | 
96 |
97 |
98 |
99 | ### 拼多多-签到-领红包
100 | * 1.将脚本 ./dist/拼多多-签到.js 复制到AutoJs脚本目录下,默认目录是:/sdcard/脚本/
101 | * 2.直接启动脚本"拼多多-签到"即可,
102 | * 3.如果遇到不能识别的页面手动点击就可以
103 |
104 | 
105 |
106 | 
107 |
108 |
109 | 
110 |
111 |
112 | ## TODO LIST
113 | ### 登陆注册
114 | * 新浪微博(Android,V9.6.3版本)
115 | * 网易邮箱(QQ浏览器,网页注册)
116 | * 今日头条(TODO)
117 | * 抖音(TODO)
118 | * 微信(TODO)
119 | * 天涯(TODO)
120 | ### 签到(TODO)
121 | * 百度地图签到
122 | * 大众点评签到
123 | * 叮咚买菜签到
124 | * 飞猪签到里程
125 | * 京东签到京豆
126 | * 京东金融签到钢镚
127 | * 联想签到延保
128 | * 拼多多签到
129 | * 上海移动和你签到
130 | * 什么值得买签到
131 | * 苏宁易购签到
132 | * 淘宝签到淘金币
133 | * 腾讯wifi管家签到
134 | * 微信读书(TODO)
135 | * 小米商城抢购web(TODO)
136 | * 新浪微博早起打卡(TODO)
137 | * 云闪付签到积分
138 | * 支付宝签到积分
139 | * 支付宝每日花呗红包
140 | * 支付宝体育服务早期打卡(TODO)
141 | ### 点赞、关注、收藏(TODO)
142 | * 新浪微博(Android,V9.6.3版本)
143 | ### 评价、回复、转发 (TODO)
144 | * 新浪微博(Android,V9.6.3版本)
145 |
146 |
147 | ## 感谢/参考:
148 | hyb1996
149 |
150 | snailuncle
151 |
152 | bjc5233
153 |
154 |
155 | ## License
156 | The framework is open-source software licensed under the MIT license.
157 |
158 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Summary
2 |
3 | * [Introduction](README.md)
4 |
5 |
--------------------------------------------------------------------------------
/addUI.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 |
3 | function addUI(options) {}
4 | addUI.prototype.apply = function (compiler) {
5 | compiler.plugin('emit', function (compilation, callback) {
6 | fs.readFile(__dirname + "/src/index.js", 'utf8', (err, data) => {
7 | if (err) throw err;
8 | if (/['"]ui['"]/.test(data)) {
9 | console.log('包含"ui"')
10 | compilation.assets['main.js']._value = '"ui";' + compilation.assets['main.js']._value
11 | } else {
12 | console.log('不包含"ui"')
13 | }
14 | callback();
15 | });
16 | });
17 | };
18 | module.exports = addUI;
19 |
--------------------------------------------------------------------------------
/docs/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/docs/.nojekyll
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/docs/README.md
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | weibo
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Getting Started
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "weibo",
3 | "version": "1.0.0",
4 | "description": "",
5 | "private": true,
6 | "scripts": {
7 | "dev": "webpack --mode=development",
8 | "build": "webpack --mode=production",
9 | "watch": "webpack --watch --mode=development",
10 | "docs": "docsify serve ./docs"
11 | },
12 | "keywords": [],
13 | "author": "",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "extract-text-webpack-plugin": "^4.0.0-beta.0",
17 | "glob": "^7.1.4",
18 | "webpack": "^4.36.1",
19 | "webpack-cli": "^3.3.6"
20 | },
21 | "dependencies": {
22 | "lodash": "^4.17.15"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-183903.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-183903.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-183918.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-183918.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-190455.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-190455.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-222249.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-222249.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-222256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-222256.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-222839.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-222839.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223143.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223143.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223208.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223208.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223220.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223220.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223233.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223233.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223315.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223315.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223336.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223336.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223416.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223416.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223427.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223427.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190810-223640.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190810-223640.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-005736.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-005736.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-142627.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-142627.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-142645.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-142645.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-143126.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-143126.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-144305.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-144305.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-144454.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-144454.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-145459.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-145459.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-153009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-153009.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-170849.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-170849.png
--------------------------------------------------------------------------------
/resources/Screenshot_20190811-215140.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/Screenshot_20190811-215140.png
--------------------------------------------------------------------------------
/resources/autojs_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/autojs_01.png
--------------------------------------------------------------------------------
/resources/template/base64.txt:
--------------------------------------------------------------------------------
1 | ../resources/template/weiboqianbao_hong.png
2 | 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
3 |
4 |
5 |
6 | ../resources/template/微博钱包LOGO.png
7 | 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
8 |
9 |
10 |
11 | ../resources/template/zhaoqidaka.png
12 | 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
13 |
14 |
15 |
16 | ../resources/template/微博文字.png
17 | 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
18 |
19 |
20 |
21 | ../resources/template/微博钱包文字.png
22 | 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
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/template/weiboqianbao_hong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/template/weiboqianbao_hong.png
--------------------------------------------------------------------------------
/resources/template/zhaoqidaka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/template/zhaoqidaka.png
--------------------------------------------------------------------------------
/resources/template/微博文字.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/template/微博文字.png
--------------------------------------------------------------------------------
/resources/template/微博钱包LOGO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/template/微博钱包LOGO.png
--------------------------------------------------------------------------------
/resources/template/微博钱包文字.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayson/autojs/4b88ea2befec9282c8855ca4efd90d02174a74a1/resources/template/微博钱包文字.png
--------------------------------------------------------------------------------
/src/common/api.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview API接口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | */
7 |
8 | var Env = require('../env')
9 | var Sms = require('./sms')
10 | var Utils = require('./utils')
11 |
12 | var api={
13 |
14 | /**
15 | * 获取一个全局的配置文件
16 | */
17 | getConfig:function() {
18 | try {
19 | // toast('开始获取配置');
20 | let c = Env.curName;
21 | let r = http.get("http://api.tfjym.com/ai/chat/config?f="+Env.CLIENT+"&n=" + encodeURIComponent(c) + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&v=" + Env.VERSION);
22 | let body = r.body.string();
23 | // toast('get config ok');
24 | if (!!body) {
25 | let conf = JSON.parse(body);
26 | if (conf) {
27 | if (!conf.disabled) {
28 | Env.config = conf;
29 | }
30 | Env.token = !!Env.config.token ? Env.config.token : Env.token;
31 | Env.itemJihuo = !!Env.config.itemJihuo ? Env.config.itemJihuo : Env.itemJihuo;
32 | Env.itemLogin = !!Env.config.itemLogin ? Env.config.itemLogin : Env.itemLogin;
33 | Env.itemRegister = !!Env.config.itemRegister ? Env.config.itemRegister : Env.itemRegister;
34 | Env.exceptPhone = !!Env.config.exceptPhone ? Env.config.exceptPhone : Env.exceptPhone;
35 | Env.canReply = Env.config.canReplyDisabled ? Env.canReply : Env.config.canReply;
36 | Env.config.debug ? console.show() : console.hide();
37 | }
38 | }
39 | return body;
40 | } catch (e) {
41 | // console.log(JSON.stringify(e));
42 | }
43 | },
44 |
45 | /**
46 | * 获取关键字
47 | */
48 | getKeyword:function () {
49 | // console.log('get reply msg');
50 | try {
51 | let r = http.get("http://api.tfjym.com/ai/chat/keyword?f="+Env.CLIENT+"&n=" + encodeURIComponent(Env.curName) + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&v=" + Env.VERSION);
52 | let body = r.body.string();
53 | // console.log('reply msg:' + body);
54 | if (!!body) {
55 | // let conf = JSON.parse(body);
56 | // if (conf) {
57 | // Env.curKeywords = conf;
58 | // }
59 | Env.curKeyword = body;
60 | }
61 | return body;
62 | } catch (e) {
63 | Env.curKeyword = null;
64 | }
65 |
66 | },
67 |
68 | /**
69 | * 获取评论内容
70 | * @param {*} msg
71 | */
72 | getReplyMsg:function(msg) {
73 | // console.log('get reply msg');
74 | try {
75 | let c = !!msg ? msg : Env.curTitleContent.substr(0, 255);
76 | let r = http.get("http://api.tfjym.com/ai/chat/reply?f="+Env.CLIENT+"&c=" + encodeURIComponent(c) + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&v=" + Env.VERSION);
77 | let body = r.body.string();
78 | // console.log('reply msg:' + body);
79 | Env.curComment = body;
80 | return body;
81 | } catch (e) {
82 | Env.curComment = null;
83 | }
84 |
85 | },
86 |
87 | getComment:function(){
88 | return this.postReplyMsg();
89 | },
90 |
91 | getLoginPhone:function(){
92 | return Sms.getPhone(Env.itemLogin);
93 | },
94 |
95 |
96 | getActivePhone:function(){
97 | return Sms.getPhone(Env.itemJihuo);
98 | },
99 |
100 |
101 | getLoginCode:function(){
102 | return Sms.getSMS(Env.curPhone,Env.itemLogin);
103 | },
104 |
105 | getHotTextItem:function(){
106 | let groupItems = ['推荐', '榜单', '社会', '搞笑', '情感', '时尚', '校园', '摄影', '艺术', '明星', '美女', 'NBA'];
107 | if (Env.config && Env.config.groupItems && Env.config.groupItems.length > 0) {
108 | groupItems = Env.config.groupItems;
109 | // toast('use Env.config group items');
110 | }
111 |
112 | Env.curGroupId = 0;
113 | let subGroup = random(0, groupItems.length - 1);
114 | if (Env.config && Env.config.subGroupId > -1) {
115 | subGroup = Env.config.subGroupId;
116 | }
117 | Env.curHotTextItem = groupItems[subGroup];
118 | // console.log('get hot text item api:',Env.curHotTextItem);
119 | return groupItems[subGroup];
120 | // return "国学";
121 | },
122 |
123 | getGivenWeiboTitle:function(){
124 | // return "35岁检察官带人上门打70岁空巢老人 相关部门否认寻衅滋事? 官官相护";
125 | return "青凌巴山越岭";
126 | },
127 |
128 | /**
129 | * 获取评论内容
130 | * @param {*} msg
131 | */
132 | postReplyMsg:function(msg) {
133 | let url = "http://api.tfjym.com/ai/chat/reply";
134 | r = http.postJson(url, {
135 | n: Env.curName,
136 | c: !!msg ? msg : Env.curTitleContent,
137 | d: device.getIMEI(),
138 | t: new Date().getTime(),
139 | v: Env.VERSION,
140 | f: Env.CLIENT,
141 | });
142 | let body = r.body.string();
143 | // toast(body);
144 | Env.curComment = body;
145 | return body;
146 | },
147 |
148 | /**
149 | * 获取评论内容
150 | * @param {*} msg
151 | */
152 | postUpdateStatus:function(status) {
153 | let url = "http://api.tfjym.com/ai/chat/status";
154 | r = http.postJson(url, {
155 | n: Env.curName,
156 | s: status,
157 | d: device.getIMEI(),
158 | t: new Date().getTime(),
159 | v: Env.VERSION,
160 | f: Env.CLIENT,
161 | });
162 | let body = r.body.string();
163 | // toast(body);
164 | Env.curComment = body;
165 | return body;
166 | },
167 |
168 | getTuling:function(msg) {
169 | let url = "http://www.tuling123.com/openapi/api";
170 | r = http.postJson(url, {
171 | key: "65458a5df537443b89b31f1c03202a80",
172 | info: "你好啊",
173 | userid: "1",
174 | });
175 | let body = r.body.string();
176 | toast(body);
177 | Env.curComment = body;
178 | return body;
179 | },
180 |
181 | loginOk:function(phone, name, type,msg) {
182 | try {
183 | let c = name;
184 | let r = http.get("http://api.tfjym.com/ai/chat/loginok?f="+Env.CLIENT+"&n=" + encodeURIComponent(c) +"&msg=" + encodeURIComponent(msg)
185 | + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&p=" + phone + "&tp=" + type);
186 | let body = r.body.string();
187 | // toast(body);
188 | // config = body;
189 | // console.log('login ok back:' + body);
190 | return body;
191 | } catch (e) {
192 |
193 | }
194 | },
195 | /**
196 | * 获取手机号的激活码
197 | */
198 | getCode:function(phone){
199 | try {
200 | phone = !!phone ? phone : Env.curPhone
201 | let c = name;
202 | let r = http.get("http://api.tfjym.com/ai/chat/phone/code?f="+Env.CLIENT+"&n=" + encodeURIComponent(c) + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&p=" + phone );
203 | let body = r.body.string();
204 | return body;
205 | } catch (e) {
206 |
207 | }
208 | },
209 |
210 | getRegisterPhone: function () {
211 | return Sms.getPhone(Env.itemRegister);
212 | },
213 |
214 | getRegisterCode: function () {
215 | return Sms.getSMS(Env.curPhone, Env.itemRegister);
216 | },
217 |
218 | getRegisterSendCode: function () {
219 | return Sms.sendSMS(Env.curPhone, Env.itemRegister, '注册验证');
220 | },
221 |
222 | getRegisterName: function () {
223 | try {
224 | let c = Env.curName;
225 | let r = http.get("http://api.tfjym.com/ai/chat/username?f="+Env.CLIENT+"&n=" + encodeURIComponent(c)
226 | + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&p=" + Env.curPhone );
227 | let body = r.body.string();
228 | Env.curUsername = body;
229 | Env.curName = body;
230 | return body;
231 | } catch (e) {
232 |
233 | }
234 | },
235 |
236 | getRegisterPassword: function () {
237 | try {
238 | let c = Env.curName;
239 | let r = http.get("http://api.tfjym.com/ai/chat/password?f="+Env.CLIENT+"&n=" + encodeURIComponent(c)
240 | + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&p=" + Env.curPhone );
241 | let body = r.body.string();
242 | return Utils.isNull(body) ? Env.curDefaultPassword : body;
243 | } catch (e) {
244 |
245 | }
246 | },
247 |
248 | getRegisterOk: function (){
249 | let msg = {username:Env.curUsername,name:Env.curName,phone:Env.curPhone,item:Env.itemRegister,client:Env.CLIENT};
250 | console.log('register ok:',msg)
251 | return this.loginOk(Env.curPhone,Env.curName,'register',JSON.stringify(msg));
252 | },
253 |
254 | getLoginName: function(){
255 | let phones = Env.curPHoneList;
256 | return random(0, phones.length - 1);
257 | },
258 |
259 | getLoginPassword: function(){
260 | return '123456';
261 | },
262 |
263 | finish: function (){
264 | let msg = {username:Env.curUsername,name:Env.curName,phone:Env.curPhone,item:Env.itemRegister,client:Env.CLIENT};
265 | console.log('register ok:',msg)
266 | return this.loginOk(Env.curPhone,Env.curName,'register',JSON.stringify(msg));
267 | },
268 |
269 | getWeiboAccount: function () {
270 | try {
271 | let c = Env.curName;
272 | let r = http.get("http://api.tfjym.com/ai/weibo/account?f="+Env.CLIENT+"&n=" + encodeURIComponent(c)
273 | + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&s=0" );
274 | let body = r.body.string();
275 | Env.curUsername = body;
276 | Env.curName = body;
277 | console.log('getWeiboAccount:', Env.curUsername);
278 | return body;
279 | } catch (e) {
280 |
281 | }
282 | },
283 |
284 | getWeiboPassword: function () {
285 | try {
286 | let c = Env.curName;
287 | let r = http.get("http://api.tfjym.com/ai/weibo/password?f="+Env.CLIENT+"&n=" + encodeURIComponent(c)
288 | + "&t=" + new Date().getTime() + "&d=" + device.getIMEI() + "&p=" + Env.curPhone );
289 | let body = r.body.string();
290 | console.log('getWeiboPassword phone:', Env.curPhone, ' pwd:', body);
291 | return Utils.isNull(body) ? Env.curDefaultPassword : body;
292 | } catch (e) {
293 |
294 | }
295 | },
296 |
297 | }
298 | module.exports=api
299 |
--------------------------------------------------------------------------------
/src/common/operate.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 定义可以的操作
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | *
7 | */
8 |
9 | /**
10 | * get 获取本地或者远程文本并写到全局变量,
11 | * set_text 设置控件的text属性,
12 | * click 点击这个按钮,
13 | * input OneByOne向控件输入文字,
14 | * swipe 滑动页面,
15 | * sleep 暂停,
16 | * refresh 下拉刷新页面,
17 | * back 点击Android的返回键,
18 | * text 获取控件的text属性值,
19 | * desc 获取控件的desc描述值,
20 | * tap 点击控件位置的屏幕,
21 | * enter 触发回车,
22 | * image 通过图片搜索控件
23 | * { name: "image", mark: { base64: wbqianbao_logo }, param:{action:"tap"} },
24 | * 函数可以扩展
25 | */
26 |
27 | var Utils = require('./utils');
28 | var Funs = require('./funs');
29 | var Api = require('./api');
30 | var Env = require('../env');
31 |
32 | var operate = {
33 | /**
34 | * 获取当前页面,OK
35 | * @param {*} pages
36 | */
37 | curPage: function (pages) {
38 | // var result = [];
39 | let result = { name: '', pageid: 0 };
40 | // pages.forEach((item, index, arr) => {
41 | // if (this.doExists(item.mark)) {
42 | // result = item;
43 | // }
44 | // })
45 | // console.log(JSON.stringify(pages));
46 | for (let k in pages) {
47 | if (this.doExists(pages[k].mark)) {
48 | // 增加优先级排序,区别有同样标志的页面
49 | if(!Utils.isNull(pages[k].priority) && pages[k].priority < result.priority)
50 | {
51 | console.log('same mark and priority lower',result.name, pages[k].name);
52 | }else{
53 | result = pages[k];
54 | }
55 | }
56 | }
57 | return result;
58 | },
59 |
60 | /**
61 | * 获取下一个步骤
62 | * @param {*} pages
63 | */
64 | nextStep: function (pageid, pages) {
65 | // var result = [];
66 | // console.log('nextStep:',pageid,JSON.stringify(pages));
67 | let result = { next: 0, pageid: 0, jobs: [] };
68 | for (let k in pages) {
69 | let item = pages[k];
70 | if (item.pageid === pageid) {
71 | result = item;
72 | }
73 | }
74 | return result.next;
75 | },
76 |
77 | /**
78 | * 判断是否为指定页面,OK
79 | * @param {*} mark
80 | */
81 | isPage: function (mark) {
82 | return this.doExists(mark);
83 | },
84 |
85 | /**
86 | *
87 | * 根据传入的属性,构建查找到对应节点的对象,OK
88 | *
89 | * @param {*} item
90 | */
91 | build: function (item) {
92 | // let funNames = ['id','text','desc','className','depth','textStartsWith','textEndsWith'];
93 | let target = null;
94 | if (Utils.isNull(item.name)) {
95 | for (let k in item) {
96 | let v = item[k];
97 | if (v != "" && v != null && v != undefined) {
98 | if (!!target) {
99 | target = eval('target.' + k + '(v)');
100 | } else {
101 | target = eval(k + '(v)');
102 | }
103 | // console.log('build target:'+JSON.stringify(target));
104 | }
105 | }
106 | }
107 | return target;
108 | },
109 | /**
110 | * 支持更复杂的或者表达式,目前不启用
111 | * @param {*} item
112 | */
113 | parseItem: function (item) {
114 | let obj = JSON.parse(JSON.stringify(item));
115 | let t = 1;
116 | for (let k in item) {
117 | let v = item[k];
118 | if (v != "" && v != null && v != undefined) {
119 | obj[k] = v.split('||');
120 | // t *= Math.pow(2,obj[k].length-1);
121 | t *= obj[k].length;
122 | }
123 | }
124 | // console.log(t);
125 | // console.log(JSON.stringify(obj));
126 | let ls = Utils.fill(t, item);
127 |
128 | for (let k in obj) {
129 | let v = obj[k];
130 | // console.log(k);
131 | // console.log(JSON.stringify(v));
132 | if (Array.isArray(v)) {
133 | // let n = t / v.length;
134 | // let m = v.length;
135 | for (let m = 0; m < v.length; m += 1) {
136 | // console.log("m:"+m);
137 | for (let n = 0; n < t / v.length; n += 1) {
138 | // console.log("n:"+n);
139 | // console.log("v[m]:"+v[m]);
140 | let i = m * (t / v.length) + n;
141 | ls[i][k] = v[m];
142 | // console.log("ls["+i+"]["+k+"]:"+ls[i][k]);
143 | }
144 |
145 | }
146 | } else {
147 | for (let m = 0; m < t; m += 1) {
148 | ls[m][k] = v;
149 | }
150 | }
151 | // console.log(JSON.stringify(ls));
152 | }
153 | return ls;
154 | },
155 |
156 |
157 | /**
158 | * 根据传入的属性,查找对应的节点并返回,OK
159 | * @param {*} mark
160 | * @param {*} param
161 | */
162 | findNode: function (mark, param) {
163 | let target = null;
164 | // 有多个同样的,或者只有一个但是需要向上一级获取子节点
165 | if (!!param && !Utils.isNull(param.indexOf)) {
166 | //需要向上一级获取子节点
167 | if (!Utils.isNull(param.parent) && param.parent > 0) {
168 | target = this.build(mark).findOne();
169 | let pLen = param.parent;
170 | while (pLen > 0) {
171 | target = target.parent();
172 | pLen--;
173 | }
174 | target = target.children();
175 | } else {
176 | target = this.build(mark).find();
177 | }
178 | //有多个同样的,根据param.indexOf过滤节点,选择一个
179 | // {name:"click", mark:{id:"tv_userinfo"}, param:{indexOf:{tag:"text",try:10,get:{name:"given_weibo_title",uri:"api"}}}},
180 | // {name:"click", mark:{id:"tv_userinfo"}, param:{indexOf:{tag:"text",try:10,default:"测试位置"}}},
181 | target = this.indexOfNode(mark, param, target);
182 | } else {
183 | //只会有一个的情况
184 | target = this.build(mark).findOnce();
185 | }
186 | if (!target) {
187 | console.log('can not find ctrl', JSON.stringify(mark), JSON.stringify(param));
188 | }
189 | return target;
190 |
191 | },
192 |
193 | indexOfNode: function (mark, param, target) {
194 | //没有找到尝试向上滚动一下找找
195 | let maxTry = 1;
196 | if (!Utils.isNull(param.indexOf.try) && param.indexOf.try > -1) {
197 | maxTry = param.indexOf.try;
198 | }
199 | let tryt = maxTry;
200 | while (tryt > 0 && target.length <= 0) {
201 | // console.log('find node try down',tryt,target.length);
202 | this.doSwipe({}, { count: 1 });
203 | target = this.build(mark).find();
204 | tryt--;
205 | }
206 | // 找到了处理一下
207 | if (target.length > 0) {
208 | if (typeof param.indexOf === 'number') {
209 | //取多个里的指定个
210 | if (param.indexOf == -1 || param.indexOf >= target.length) {
211 | target = target[target.length - 1];
212 | } else {
213 | target = target[param.indexOf];
214 | }
215 | } else if (typeof param.indexOf === 'object'
216 | && !Utils.isNull(param.indexOf.tag)
217 | ) {
218 | if (typeof param.indexOf.get === 'object') {
219 | let str = this.doGet(param.indexOf.get);
220 | target = eval('target.findOne(' + param.indexOf.tag + "(str))");
221 | } else if (!Utils.isNull(param.indexOf.default)) {
222 | let str = param.indexOf.default;
223 | // console.log('find node str:',str);
224 | target = eval('target.findOne(' + param.indexOf.tag + "(str))");
225 | } else {
226 | target = target[0];
227 | }
228 | } else {
229 | target = target[0];
230 | }
231 | } else {
232 | target = null;
233 | }
234 | //移动一段距离
235 | while (maxTry - tryt > 0) {
236 | // console.log('find node try up',tryt);
237 | this.doSwipe({}, { count: 1, isUp: true });
238 | tryt++;
239 | }
240 | return target;
241 | },
242 | /**
243 | * 调用click执行点击操作,OK
244 | * @param {*} mark
245 | * @param {*} param
246 | */
247 | doClick: function (mark, param) {
248 | console.log('do click');
249 | let target = this.findNode(mark, param);
250 | if (!!target) {
251 | if (target.clickable()) {
252 | return target.click();
253 | } else {
254 | if (!!param && param.clickChild) {
255 | return this.clickChild(target);
256 | } else {
257 | return this.clickParent(target);
258 | }
259 | }
260 | } else {
261 | console.log('not do click');
262 | }
263 | return false;
264 | },
265 | /**
266 | * 调用tap点击界面,OK
267 | * @param {*} mark
268 | * @param {*} param
269 | */
270 | doTap: function (mark, param) {
271 | console.log('do tap');
272 | let target = this.findNode(mark, param);
273 | if (!!target) {
274 | Tap(target.bounds().centerX(), target.bounds().centerY());
275 | sleep(500);
276 | Tap(target.bounds().centerX() + 1, target.bounds().centerY()) + 1;
277 | Tap(target.bounds().centerX() - 1, target.bounds().centerY()) - 1;
278 | Tap(target.bounds().centerX() + 2, target.bounds().centerY()) + 2;
279 | Tap(target.bounds().centerX() - 2, target.bounds().centerY()) - 2;
280 | return true;
281 | } else {
282 | console.log('not do tap');
283 | }
284 | return false;
285 | },
286 | /**
287 | * 输入到控件,只支持英文和字母,OK
288 | * @param {*} mark
289 | * @param {*} param
290 | */
291 | doInput: function (mark, param) {
292 | console.log('do input');
293 | let target = this.findNode(mark, param);
294 | // console.log('do input', JSON.stringify(target));
295 | if (!!target) {
296 | Tap(target.bounds().centerX(), target.bounds().centerY());
297 | sleep(1000);
298 | let name = {name:"login_code"};
299 | if (!!param && !Utils.isNull(param.get)) {
300 | name = param.get;
301 | }
302 | let str = this.doGet(name);
303 | if (!!str) {
304 | Text(str);
305 | sleep(random(500,1000));
306 | // KeyCode('KEYCODE_ENTER');
307 | // KeyCode('KEYCODE_SEARCH');
308 | return true;
309 | }
310 | } else {
311 | console.log('not do input');
312 | }
313 | return false;
314 | },
315 | /**
316 | * 一个一个输入到控件,只支持英文和字母,OK
317 | * @param {*} mark
318 | * @param {*} param
319 | */
320 | doKeycode: function (mark, param) {
321 | console.log('do input');
322 | let target = this.findNode(mark, param);
323 | // console.log('do input', JSON.stringify(target));
324 | if (!!target) {
325 | Tap(target.bounds().centerX(), target.bounds().centerY());
326 | sleep(1000);
327 | let name = {name:"login_code"};
328 | if (!!param && !Utils.isNull(param.get)) {
329 | name = param.get;
330 | }
331 | let str = this.doGet(name);
332 | if (!!str) {
333 | let strArray = str.split("");
334 | if (strArray.length > 0) {
335 | // setText(strArray[0]);
336 | Text(strArray[0]);
337 | sleep(random(500,1000));
338 | }
339 | for (let i = 1; i < strArray.length; i++) {
340 | let char = strArray[i];
341 | // input(char);
342 | Text(char);
343 | sleep(random(500, 1000));
344 | }
345 | return true;
346 | }
347 | } else {
348 | console.log('not do input');
349 | }
350 | return false;
351 | },
352 | /**
353 | * 设置控件内容,OK
354 | * @param {*} mark
355 | * @param {*} param
356 | */
357 | doSetText: function (mark, param) {
358 | console.log('do set text');
359 | let target = this.findNode(mark, param);
360 | if (!!target) {
361 | let name = { name: 'comment' };
362 | if (!!param && !Utils.isNull(param.get)) {
363 | name = param.get;
364 | }
365 | // let str = Api.postReplyMsg();
366 | let str = this.doGet(name);
367 | console.log('do set text get '+name.name+':'+str);
368 | if (!!str) {
369 | return target.setText(str);
370 | }
371 | } else {
372 | console.log('not do set text');
373 | }
374 | return false;
375 | },
376 | /**
377 | * 获取控件text内容,OK
378 | * @param {*} mark
379 | * @param {*} param
380 | */
381 | doText: function (mark, param) {
382 | console.log('do text');
383 | let target = this.findNode(mark, param);
384 | if (!!target) {
385 | let name = { name: "title_content" };
386 | if (!!param && !Utils.isNull(param.set)) {
387 | name = param.set;
388 | }
389 | let str = target.text();
390 | this.doSet(name, { default: str });
391 | console.log(str.substr(0, 100));
392 | return str;
393 | } else {
394 | console.log('not do text');
395 | }
396 | return null;
397 | },
398 | /**
399 | * 获取控件desc内容,OK
400 | * @param {*} mark
401 | * @param {*} param
402 | */
403 | doDesc: function (mark, param) {
404 | console.log('do desc');
405 | let target = this.findNode(mark, param);
406 | if (!!target) {
407 | Env.curTitleContent = target.desc();
408 | console.log(Env.curTitleContent.substr(0, 100));
409 | return target.desc();
410 | } else {
411 | console.log('not do desc');
412 | }
413 | return null;
414 | },
415 | /**
416 | * 向下滚动,OK
417 | * @param {*} mark
418 | * @param {*} param
419 | */
420 | doSwipe: function (mark, param) {
421 | //滚动
422 | console.log('do swipe');
423 | let rx = random(200, 400);
424 | let rm = -1;
425 | if (!!param && !Utils.isNull(param.count) && param.count > -1) {
426 | rm = parseInt(param.count);
427 | }
428 | if (rm == -1 || rm == undefined || rm == null || rm == "") {
429 | rm = random(1, 3);
430 | }
431 | let isUp = false;
432 | if (!!param && !Utils.isNull(param.isUp)) {
433 | isUp = param.isUp;
434 | }
435 | while (rm > 0) {
436 | console.log('swipe:' + rm, isUp);
437 | if (isUp) {
438 | Swipe(rx + random(0, 25), 180 + random(0, 100), rx + random(0, 29), 580 + random(0, 158), 200 + random(0, 200));
439 | } else {
440 | Swipe(rx + random(0, 29), 580 + random(0, 158), rx + random(0, 25), 180 + random(0, 100), 200 + random(0, 200));
441 | }
442 | sleep(random(500, 1000));
443 | rm -= 1;
444 | }
445 | return true;
446 | },
447 |
448 | /**
449 | * 刷新页面,Ok
450 | */
451 | doRefresh: function (mark, param) {
452 | console.log('do refresh');
453 | //下拉刷新
454 | Swipe(310, 250, 310, 600);
455 | // Swipe(310 + random(0, 5), 400 + random(0, 15), 310 + random(0, 25), 700 + random(0, 10));
456 | sleep(1000 + random(0, 2000));
457 | return true;
458 | },
459 | /**
460 | * 执行回退操作,Ok
461 | * @param {*} mark
462 | * @param {*} param
463 | */
464 | doBack: function (mark, param) {
465 | console.log('do back');
466 | back();
467 | return true;
468 | },
469 | /**
470 | * 执行sleep,OK
471 | * @param {*} mark
472 | * @param {*} param
473 | */
474 | doSleep: function (mark, param) {
475 | let rm = -1;
476 | if (!!param && !Utils.isNull(param.delay) && param.delay > -1) {
477 | rm = parseInt(param.delay);
478 | }
479 | if (rm == -1 || rm == undefined || rm == null || rm == "") {
480 | rm = random(1000, 2000);
481 | }
482 | console.log('do sleep', rm);
483 | sleep(rm);
484 | return true;
485 | },
486 | doEnter: function () {
487 | console.log('do enter');
488 | KeyCode("KEYCODE_ENTER");
489 | },
490 | /**
491 | * 等待控件出现
492 | * @param {*} mark
493 | * @param {*} param
494 | */
495 | doWait: function (mark, param) {
496 | console.log('do wait for');
497 | let target = this.build(mark);
498 | let msg = 'Wait For';
499 | if (!Utils.isNull(mark.text)) {
500 | msg += ':Text:' + mark.text;
501 | }
502 | if (!Utils.isNull(mark.desc)) {
503 | msg += ':Desc:' + mark.desc;
504 | }
505 | if (!Utils.isNull(mark.id)) {
506 | msg += ':Id:' + mark.id;
507 | }
508 | console.log(msg);
509 | toast(msg);
510 | return target.waitFor();
511 | },
512 | /**
513 | * 执行shell命令
514 | * @param {*} mark
515 | * @param {*} param
516 | */
517 | doShell: function (mark, param) {
518 | console.log('do shell');
519 | let rs = { code: -1 };
520 | // console.log(JSON.stringify(param));
521 | if (!!param && !Utils.isNull(param.cmd)) {
522 | let root = false;
523 | if (!Utils.isNull(param.root) && param.root === true) {
524 | root = true;
525 | }
526 | rs = shell(param.cmd, root);
527 | if (rs.code == 0) {
528 | console.log("run shell success", JSON.stringify(rs));
529 | } else {
530 | console.log("run shell failed", JSON.stringify(rs));
531 | }
532 | }
533 | return rs.code == 0;
534 | },
535 | /**
536 | * 点击指定图片
537 | * @param {*} mark
538 | * @param {*} param
539 | */
540 | doImage: function (mark, param) {
541 | console.log('do image');
542 | let img = null;
543 | try {
544 | if (!Utils.isNull(mark.path)) {
545 | // console.log('image read from path');
546 | if (files.isFile(mark.path))
547 | img = images.read(mark.path)
548 | }
549 | if (!Utils.isNull(mark.base64)) {
550 | // console.log('image from base64');
551 | img = images.fromBase64(mark.base64);
552 | }
553 | if (!Utils.isNull(mark.url)) {
554 | // console.log('image load from url');
555 | img = images.load(mark.url);
556 | }
557 | if (img != null) {
558 | let p = findImage(captureScreen(), img);
559 | if (p) {
560 | let x = p.x + img.getWidth() / 2;
561 | let y = p.y + img.getHeight() / 2;
562 | console.log("find image: ", p, img.getWidth(), img.getHeight(), x, y);
563 | if(!!param && !Utils.isNull(param.action) && Utils.titleCase(param.action) == 'Tap'){
564 | Tap(x, y);
565 | sleep(1000);
566 | }
567 | return true;
568 | } else {
569 | console.log("not find image");
570 | return false;
571 | }
572 | }
573 | console.log("not find image");
574 | return false;
575 | } catch (error) {
576 | console.log("do image in catch", error);
577 | return false;
578 | }
579 |
580 | },
581 | /**
582 | * 一直返回true
583 | * @param {*} mark
584 | * @param {*} param
585 | */
586 | doUnknow:function(mark,param){
587 | return true;
588 | },
589 | /**
590 | *
591 | * 根据传入的属性,判断对应的节点是否存在,OK
592 | *
593 | * @param {*} mark
594 | */
595 | doExists: function (mark, param) {
596 | // console.log('do exists');
597 | if (!Utils.isNull(mark.name)) {
598 | return this.doFun(mark);
599 | // return eval('this.do'+Utils.titleCase(mark.name)+'(mark.mark, param)');
600 | } else {
601 | let target = this.build(mark);
602 | // console.log(this.build(mark).exists());
603 | let rs = !!target ? target.exists() : false;
604 | console.log('do exists:',rs);
605 | return rs;
606 | }
607 | },
608 | /**
609 | * 换IP,OK
610 | * @param {*} mark
611 | * @param {*} param
612 | */
613 | doFly: function (mark, param) {
614 | console.log('do fly');
615 | let rm = -1;
616 | if (!!param && !Utils.isNull(param.delay) && param.delay > -1) {
617 | rm = parseInt(param.delay) * 1000;
618 | }
619 | if (rm == -1 || rm == undefined || rm == null || rm == "") {
620 | rm = random(30000, 60000);
621 | }
622 | //开启飞行模式
623 | Funs.closeFly();
624 | sleep(rm);
625 | //关闭飞行模式
626 | Funs.openFly();
627 | return true;
628 | },
629 | /**
630 | * 点击父控件,OK
631 | * @param {*} target
632 | */
633 | clickParent: function (target) {
634 | if (!!target) {
635 | let count = target.depth();
636 | // console.log('depth:'+count);
637 | while (count > 0 && target != null) {
638 | if (target.clickable()) {
639 | target.click();
640 | count = -1;
641 | break;
642 | } else {
643 | if (!!target.parent()) {
644 | target = target.parent();
645 | count -= 1;
646 | } else {
647 | count = -1;
648 | break;
649 | }
650 | }
651 | }
652 | if (count == -1) {
653 | return true;
654 | }
655 | } else {
656 | console.log('not click parent');
657 | }
658 | return false;
659 | },
660 | /**
661 | *
662 | * 点击子控件
663 | *
664 | * @param {*} target
665 | */
666 | clickChild: function (target) {
667 | if (!!target) {
668 | if (target.clickable()) {
669 | return target.click();
670 | } else {
671 | target.children().forEach(child => {
672 | if (child.clickable()) {
673 | return child.click();
674 | }
675 | });
676 | }
677 | } else {
678 | console.log('not click child');
679 | }
680 | return false;
681 | },
682 | /**
683 | * 设置全局变量
684 | * @param {*} mark
685 | * @param {*} param
686 | */
687 | doSet: function (mark, param) {
688 | console.log('do set');
689 | if (!!mark && !Utils.isNull(mark.name)) {
690 | let valName = "cur" + Utils.titleCase(mark.name);
691 | let value = '';
692 | if (!!param && !Utils.isNull(param.default)) {
693 | value = param.default;
694 | }
695 | return eval("Env." + valName + "=value;");
696 | }
697 | return null;
698 | },
699 | /**
700 | * 获取全局变量的内容或者调用指定API获取内容并设置全局变量
701 | * @param {*} mark
702 | * @param {*} param
703 | */
704 | doGet: function (mark, param) {
705 | console.log('do get');
706 | let result = null;
707 | //增加默认值,默认值写在mark里
708 | if (!!mark && !Utils.isNull(mark.default)){
709 | result = mark.default;
710 | }
711 | if (!!mark && !Utils.isNull(mark.name)) {
712 |
713 | let valName = "Env.cur" + Utils.titleCase(mark.name);
714 | if (!Utils.isNull(mark.uri)) {
715 | if (mark.uri == 'api') {
716 | valName = Utils.titleCase(mark.uri) + "." + "get" + Utils.titleCase(mark.name) + "();";
717 | }
718 | let rs = eval(valName);
719 | let setName = { name: mark.name };
720 | if (!!param && !Utils.isNull(param.set)) {
721 | setName = param.set;
722 | }
723 | this.doSet(setName, { default: rs });
724 | return rs;
725 | } else {
726 | return eval(valName);
727 | }
728 | }
729 | return result;
730 | },
731 | /**
732 | * 调用指定名称的函数,OK
733 | * @param {*} name
734 | * @param {*} mark
735 | * @param {*} params
736 | */
737 | doFun: function ({ name, mark, param }) {
738 | let delay = 1000;
739 | if (!!param && param.delay > -1) {
740 | delay = param.delay;
741 | }
742 | sleep(delay);
743 | if (!!name) {
744 | let funName = "do" + Utils.titleCase(name);
745 | // 增加循环执行,解决某些标记问题
746 | let loops = 1;
747 | let result = false;
748 | if(!!param && !Utils.isNull(param.loops) && param.loops > 1){
749 | loops = param.loops;
750 | }
751 | while(loops > 0){
752 | result = eval("this." + funName + "(mark,param);");
753 | loops--;
754 | }
755 | return result;
756 | } else {
757 | console.log('not do fun:' + name);
758 | }
759 | },
760 | delay: function () {
761 | let type = arguments[0] === false ? false : true;
762 | let delay = typeof (arguments[0]) === "number" ? arguments[0] : 1000;
763 | if (type) {
764 | sleep(delay);
765 | console.log('delay', delay);
766 | } else {
767 | console.log('not delay');
768 | }
769 | }
770 | }
771 |
772 | module.exports = operate;
773 |
774 |
775 |
--------------------------------------------------------------------------------
/src/common/sms.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 短信指定接收,目前采用51短信平台
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | */
7 |
8 |
9 | var Env = require('../env');
10 |
11 | var sms={
12 |
13 | _errorCode: {
14 | 1001: '参数token不能为空',
15 | 1002: '参数action不能为空',
16 | 1003: '参数action错误',
17 | 1004: 'token失效',
18 | 1005: '用户名或密码错误',
19 | 1006: '用户名不能为空',
20 | 1007: '密码不能为空',
21 | 1008: '账户余额不足',
22 | 1009: '账户被禁用',
23 | 1010: '参数错误',
24 | 1011: '账户待审核',
25 | 1012: '登录数达到上限',
26 | 2001: '参数itemid不能为空',
27 | 2002: '项目不存在',
28 | 2003: '项目未启用',
29 | 2004: '暂时没有可用的号码',
30 | 2005: '获取号码数量已达到上限',
31 | 2006: '参数mobile不能为空',
32 | 2007: '号码已被释放',
33 | 2008: '号码已离线',
34 | 2009: '发送内容不能为空',
35 | 2010: '号码正在使用中',
36 | 3001: '尚未收到短信',
37 | 3002: '等待发送',
38 | 3003: '正在发送',
39 | 3004: '发送失败',
40 | 3005: '订单不存在',
41 | 3006: '专属通道不存在',
42 | 3007: '专属通道未启用',
43 | 3008: '专属通道密码与项目不匹配',
44 | 9001: '系统错误',
45 | 9002: '系统异常',
46 | 9003: '系统繁忙'
47 | },
48 |
49 | getPhone:function(itemid) {
50 |
51 | var baseUrl = 'http://api.fxhyd.cn/UserInterface.aspx?action=getmobile&token=' + Env.token + '&itemid=' + itemid + '&excludeno=' + Env.exceptPhone + '×tamp=' + new Date().getTime() //
52 | var r = http.get(baseUrl);
53 | console.log("从平台获取手机号码code = " + r.statusCode);
54 | var result = r.body.string()
55 | console.log("从平台获取手机号码html = " + result);
56 | if (result.indexOf('success') != -1) {
57 | result = result.split('|');
58 | var phone = result[1]
59 | console.log('手机号码=', phone)
60 | return phone
61 | } else {
62 | console.log(this._errorCode[result])
63 | console.log('从平台获取手机号码异常,请检查网络或者token是否失效,脚本停止')
64 | return null;
65 | }
66 | },
67 |
68 | getSMS:function(phone, itemid) {
69 | var count = 50;
70 | var r = null;
71 | var result = null;
72 | var baseUrl = 'http://api.fxhyd.cn/UserInterface.aspx?action=getsms&token=' + Env.token + '&itemid=' + itemid + '&mobile=' + phone + '&release=1×tamp=' + new Date().getTime();
73 | while (count > 0) {
74 | r = http.get(baseUrl);
75 | console.log("从平台获取手机验证码code = " + r.statusCode);
76 | result = r.body.string();
77 | console.log("从平台获取手机验证码html = " + result);
78 | toast(result);
79 | if (result != 3001) {
80 | break;
81 | }
82 | count -= 1;
83 | sleep(3000);
84 | }
85 | if (!!result && result.indexOf('success') != -1) {
86 | result = result.split('|');
87 | var code = result[1].match(/\d{6}/g).join("");
88 | console.log('验证码=', code)
89 | return code
90 | } else {
91 |
92 | console.log(this._errorCode[result])
93 | console.log('从平台获取手机验证码异常,请检查网络或者token是否失效')
94 | return null
95 | }
96 | },
97 |
98 | sendSMS:function(phone, itemid, msg) {
99 |
100 | var baseUrl = 'http://api.fxhyd.cn/UserInterface.aspx?action=sendsms&token=' + Env.token + '&itemid=' + itemid + '&mobile=' + phone + '&sms=' + msg + '×tamp=' + new Date().getTime();
101 | var r = http.get(baseUrl);
102 | console.log("从手机号码发送code = " + r.statusCode);
103 | var result = r.body.string();
104 | toast(result);
105 | console.log("从平台发送手机号码html = " + result);
106 | if (result.indexOf('success') != -1) {
107 | return result
108 | } else {
109 | console.log(this._errorCode[result])
110 | console.log('从平台发送短信异常,请检查网络或者Env.是否失效,脚本停止')
111 | return null
112 | }
113 | },
114 |
115 | addPhoneBack:function(phone, itemid) {
116 | var baseUrl = 'http://api.fxhyd.cn/UserInterface.aspx?action=addignore&token=' + Env.token + '&itemid=' + itemid + '&mobile=' + phone + '×tamp=' + new Date().getTime() //
117 | var r = http.get(baseUrl);
118 | console.log("拉黑手机号码code = " + r.statusCode);
119 | var result = r.body.string()
120 | console.log("拉黑手机号码html = " + result);
121 | if (result.indexOf('success') != -1) {
122 | console.log('手机号码拉黑成功=', phone)
123 | } else {
124 | console.log(this._errorCode[result])
125 | console.log('拉黑手机号码异常,请检查网络或者token是否失效,脚本停止')
126 | return null;
127 | }
128 | }
129 | }
130 | module.exports=sms
131 |
--------------------------------------------------------------------------------
/src/common/utils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 工具函数类
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | */
7 |
8 | var Utils = {
9 | /**
10 | * 首字母大写
11 | * @param {*} str
12 | */
13 | titleCase: function (str) {
14 | var a = str.toLowerCase().split('_');
15 | var b = a.map(function (val) { return val.replace(val.charAt(0), val.charAt(0).toUpperCase()) })
16 | return b.join('');
17 | },
18 | fill: function (len, item) {
19 | var l = [];
20 | for (var i = 0; i < len; i += 1) {
21 | l.push(JSON.parse(JSON.stringify(item)));
22 | }
23 | return l;
24 | },
25 | get: function (arr, name, value) {
26 | return arr.find(function (obj) { if (eval("obj." + name + " == value")) { return obj; } });
27 | },
28 | isNull: function (str) {
29 | //为空判断函数
30 | return !str && str !== 0 && typeof str !== "boolean" ? true : false;
31 | }
32 |
33 | }
34 | module.exports = Utils;
--------------------------------------------------------------------------------
/src/common/work.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 | var Env = require('../env');
20 | var Api = require('./api');
21 | var Utils = require('./utils');
22 | var Operate = require('./operate');
23 |
24 |
25 | var work = {
26 |
27 | _curPage: 0,
28 | _curConf: null,
29 | _pageList: [],
30 | _curStep: 0,
31 | _curJob: {},
32 | _needExit:false,
33 |
34 | init: function (job) {
35 | auto();
36 |
37 | var _curRa = new RootAutomator();
38 | events.on('exit', function () {
39 | _curRa.exit();
40 | });
41 | //获取截屏的权限
42 | requestScreenCapture();
43 |
44 | let package = job.package;
45 |
46 | if (currentPackage() != package) {
47 | launch(package);
48 | waitForPackage(package);
49 | sleep(5000);
50 | }
51 | let activity = job.activity;
52 | if(!Utils.isNull){
53 | toast('Wait For Activity:',activity);
54 | console.log('Wait For Activity:',activity);
55 | waitForActivity(activity);
56 | }
57 | //远程获取配置
58 | Api.getConfig();
59 | toast('获取配置成功');
60 | console.log('获取配置成功');
61 | sleep(1000);
62 |
63 | },
64 |
65 | /**
66 | * 主函数
67 | */
68 | main: function (jib, afterInit) {
69 | //初始化变量
70 | this._curJob = jib;
71 |
72 | //初始化
73 | this.init(this._curJob);
74 |
75 | //执行回调
76 | if (typeof afterInit === 'function') {
77 | afterInit(this._curJob);
78 | }
79 |
80 |
81 | // let items = {
82 | // login: JSON.parse(JSON.stringify(this._curJob.login)),
83 | // nickname: JSON.parse(JSON.stringify(this._curJob.nickname)),
84 | // write: JSON.parse(JSON.stringify(this._curJob.write)),
85 | // logout: JSON.parse(JSON.stringify(this._curJob.logout)),
86 | // running: JSON.parse(JSON.stringify(this._curJob.running)),
87 | // };
88 | //初始化
89 | while (!this._needExit) {
90 | //判断下一步的位置
91 | this.nextStep();
92 | for( let item of this._curJob.default.steps){
93 | if(item.step == this._curStep){
94 | this.run(JSON.parse(JSON.stringify(item)));
95 | }
96 | }
97 |
98 | sleep(1000);
99 | }
100 | //结束
101 | Api.finish();
102 |
103 | },
104 |
105 | /**
106 | * 判断下一步执行什么
107 | */
108 | nextStep: function () {
109 | let conf = Operate.curPage(this._curJob.pages);
110 | if (this._curPage != conf.pageid) {
111 | if (!!conf.operates && !!conf.operates.finish && conf.operates.finish.length > 0) {
112 | // this._pageList.splice(0,0,conf);
113 | this._pageList.push(conf);
114 | }
115 | this._curPage = conf.pageid;
116 | this._curConf = conf;
117 | }
118 | let someone = this._curJob.default.someone;
119 | for (let item of this._curJob.default.steps) {
120 | if (item.step === this._curStep && someone.length > 0) {
121 | someone = item.step.someone;
122 | break;
123 | }
124 | }
125 | this._curStep = Operate.nextStep(this._curPage, someone);
126 | toast('find:' + conf.name, this._curStep);
127 | console.log('find:' + conf.name, this._curStep);
128 |
129 | },
130 |
131 | /**
132 | * 执行指定任务
133 | * @param {*} items
134 | */
135 | run: function (items) {
136 | this.doPage(items, this._curConf);
137 | sleep(1000);
138 | },
139 | /**
140 | * 处理页面的操作
141 | * @param {*} items
142 | * @param {*} conf
143 | */
144 | doPage: function (items, conf) {
145 | let _job = null;
146 | console.log('items.length start', items.must.length, this._curStep);
147 | if (!!conf && !!conf.pageid && items.must.length > 0) {
148 | for (let m in items.must) {
149 | if (conf.pageid === items.must[m].pageid) {
150 | // toast(conf.name);
151 | // console.log(JSON.stringify(items[m].jobs));
152 | _job = items.must[m];
153 | // console.log(m,items[m].pageid);
154 | items.must.splice(m, 1);
155 | break;
156 | }
157 | }
158 | // console.log('in do page job 1:', JSON.stringify(_job));
159 | if (_job == null) {
160 | for (let m in this._curJob.default.someone) {
161 | if (conf.pageid === this._curJob.default.someone[m].pageid) {
162 | // toast(conf.name);
163 | // console.log(JSON.stringify(this._curJob.default[m].jobs));
164 | _job = this._curJob.default.someone[m];
165 | // console.log(m,this._curJob.default[m].pageid);
166 | break;
167 | }
168 | }
169 | }
170 | // console.log('in do page job:', JSON.stringify(_job));
171 | if (_job != null) {
172 | if (!!_job.next) {
173 | this._curStep = _job.next;
174 | }
175 | // console.log('in do page this._curjob.jobs:', JSON.stringify(_job.jobs));
176 | if (!!_job && !!_job.jobs) {
177 | for (let im of _job.jobs) {
178 | // console.log('in do page conf.mark:', JSON.stringify(conf.mark));
179 | if (conf.pageid !== Env.PageEnum.UNKNOW && Operate.isPage(conf.mark)) {
180 | // console.log('loop job:', JSON.stringify(im));
181 | Operate.doFun(im);
182 | } else {
183 | // console.log('not in right page:', conf.name);
184 | break;
185 | }
186 | }
187 |
188 | }
189 | if (!Utils.isNull(_job.exit) && _job.exit === true) {
190 | this._needExit = true;
191 | }
192 | }
193 | }
194 | console.log('items.must.length end', items.must.length, this._curStep);
195 |
196 | },
197 |
198 | /**
199 | * 通过返回操作,回到首页
200 | */
201 | reset: function () {
202 | while (true) {
203 | let conf = Operate.curPage(this._curJob.pages);
204 | if (Env.PageEnum.HOME != conf.pageid) {
205 | toast('找到:' + conf.name);
206 | console.log('找到:' + conf.name);
207 | break;
208 | } else {
209 | this.doBack();
210 | }
211 | sleep(1000);
212 |
213 | }
214 | },
215 | /**
216 | * 返回操作
217 | */
218 | doBack: function () {
219 | let im = { name: "back" };
220 | Operate.doFun(im);
221 | },
222 |
223 | /**
224 | * 处理页面的finish操作
225 | * @param {*} pageList
226 | */
227 | finishPage: function (pageList) {
228 | result = false;
229 | for (let k = pageList.length - 1; k >= 0; k--) {
230 | let item = pageList[k];
231 | //执行finish
232 | if (!!item.operates && !!item.operates.finish) {
233 | if (Operate.isPage(item.mark)) {
234 | for (let im of item.operates.finish) {
235 | Operate.doFun(im);
236 | }
237 | pageList.splice(k, 1);
238 | console.log('delete finish page:', item.name);
239 | } else {
240 | console.log('finish, but not in right page:', item.name);
241 | }
242 | }
243 | sleep(1000);
244 | };
245 | if (pageList.length <= 0) {
246 | result = false;
247 | }
248 | console.log('finishPage:', JSON.stringify(pageList), result);
249 | return result;
250 | },
251 | }
252 | module.exports = work;
253 |
--------------------------------------------------------------------------------
/src/env.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 全局变量
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | */
7 |
8 |
9 | var Env = {
10 |
11 | VERSION: "3.0",
12 | CLIENT: 'weibo',
13 |
14 | STATUS_NEED_ACTIVE: 1,
15 | STATUS_NEED_LOGIN: 2,
16 |
17 | log: '',
18 | curAct: '',
19 | curTitleContent: '',//详情页的标题
20 | curComment: '键(shui)盘(jun)侠你们清楚自己在干嘛吗?',
21 | curName: '',
22 | deviceIMEI: '',
23 | nickname: '', //登陆的账号
24 | curGroupId: 0, //
25 | curTitle: '', //列表页的标题
26 | canReply: false,
27 | mainActName: 'com.sina.weibo.MainTabActivity',
28 | isLogined: true,
29 | needExit: false,
30 | maxReplyCount: 2,
31 | curReplyCount: 0, //一次可以回复的最大次数
32 | lastReplyTime: 0,
33 | curMinReplyIntv: 1800, //30分钟才能回复第二条
34 | curLoop: false,
35 | isComment: 1, //0评论,1转发
36 | curKeyword: null,
37 | curKeywords: ['十年沧桑谁解'],
38 | // login
39 | itemLogin: '11698',
40 | itemJihuo: '1507',
41 | token: '01612967355ef542176c2740c0855e2a5921725c4701',
42 | exceptPhone: '170.171.180.198.165.166',
43 | curPhone: '', //当前使用的手机号
44 | curLoginCode: '',
45 | curHotTextItem: '',
46 | curUsername: '',
47 | curPassword: '',
48 | curRegisterCode: '',
49 | itemRegister: '47028', //网易邮箱
50 | curDefaultPassword:'123.youshui.Ren',
51 | curPHoneList:[],
52 | // console.show(),
53 | config: {
54 | debug: false,
55 | disabled: false,
56 | canReply: false,
57 | canReplyDisabled: false,
58 | exit: false,
59 | model: 0, //0为趁热点,1为通过搜索指定关键字回复
60 | groupId: 0,
61 | topOfGroup: 10,
62 | groupDelay: 2000,
63 | subGroupId: -1,
64 | groupItems: ['推荐', '榜单', '社会', '搞笑', '情感', '时尚', '校园', '摄影', '艺术', '明星', '美女', 'NBA'],
65 | keywords: ['十年沧桑谁解'],
66 | addFollowRate: 30,
67 | showDetialRate: 5,
68 | maxReplyCount: 2,
69 | minReplyIntv: 1800,
70 | loop: false, //循环
71 | isComment: 1,
72 | itemLogin: '11698',
73 | itemJihuo: '1507',
74 | itemRegister: '47028',
75 | exceptPhone: '170.171.180.198.165.166',
76 | token: '01612967355ef542176c2740c0855e2a5921725c4701',
77 | },
78 |
79 | PRIORITY:{
80 | LEVEL_0:0, //默认级别
81 | LEVEL_1:1,
82 | LEVEL_2:2,
83 | LEVEL_3:3,
84 | LEVEL_4:4,
85 | LEVEL_5:5,
86 | LEVEL_6:6,
87 | LEVEL_7:7,
88 | LEVEL_8:8,
89 | LEVEL_9:9, //最高优先级
90 | },
91 | PageEnum: {
92 | UNKNOW:0,
93 | LOGIN: 1,
94 | INPUT_CODE: 2,
95 | ACCOUNT_CONFIRM: 3,
96 | SELECT_CLASS: 4,
97 | RECOMMEND: 5,
98 | SIGEN: 6,
99 | USER_CENTER: 7,
100 | DETAIL: 8,
101 | HOME_HOT: 9,
102 | MINE: 10,
103 | SETTING: 11,
104 | ACCOUNTS: 12,
105 | HOME_FOLLOW: 13,
106 | HOME_SEARCH: 14,
107 | SEARCH: 15,
108 | SEARCH_HOT: 16,
109 | SEARCH_TALK: 17,
110 | SEARCH_TOP: 18,
111 | SEARCH_SUPTALK: 19,
112 | HOME_MESSAGE: 20,
113 | USER_WEIBO: 21,
114 | EDIT_SHARE: 22,
115 | ADD_FOLLOW_WITH_SHARE: 23,
116 | ACCOUNT_ERROR: 24,
117 | WELCOME_CAMEBACK: 25,
118 | WRITE_WEIBO: 26,
119 | WELCOME_WEIBO: 27,
120 | ACCOUNT_ERROR_2: 28,
121 | ACCOUNT_ERROR_3: 29,
122 | ACCOUNT_ERROR_4: 30,
123 | HOME: 31,
124 | ACCOUNT_ERROR_5: 32,
125 | ACCOUNT_ERROR_6: 33,
126 | REGISTER: 35,
127 | ACCOUNT_SEND_CONFIRM: 36,
128 | REGISTER_OK: 37,
129 | UPDATED:38,
130 | INPUT_PHONE: 39,
131 | INPUT_PASSWORD: 40,
132 | FIND_PASSWORD:41,
133 | RED_PAGE:42,
134 | RED_FRIEND_PAGE:43,
135 | RED_BUY_PAGE:44,
136 | SHARE:45,
137 | DELETE_CONFIRM:46,
138 | LOGIN_CODE:47,
139 | LOGIN_ACCOUNT:48,
140 | DELETE_FRAM:49,
141 | },
142 |
143 | /**
144 | * @description 定义各步骤的标志
145 | */
146 | STEP: {
147 | NOCHANGE: 0,
148 | LOGIN: 1,
149 | WRITE: 3,
150 | LOGOUT: 9,
151 | NICKNAME: 2,
152 | ISSTEP: 5,
153 | NEEDLOGOUT: 6,
154 | LOGINED: 7,
155 | RUNNING: 8,
156 | BEFORE:9,
157 | },
158 |
159 | }
160 | module.exports = Env;
161 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 | var Work = require('./common/work');
20 | var Env = require('./env');
21 |
22 | /**
23 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
24 | */
25 | var Job = {
26 | CLIENT: '云闪付-签到',
27 | package: 'com.unionpay',
28 | activity: "com.unionpay.activity.UPActivityMain",
29 | /**
30 | * @description 默认配置,自动加载
31 | */
32 | get default() {
33 | return {
34 | /**
35 | * @description steps定义当前任务需要完成工作的步骤
36 | */
37 | steps: [this.running],
38 | /**
39 | * @description 指定某一步骤的最大重复次数
40 | */
41 | maxTimes: [-1],
42 | /**
43 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
44 | */
45 | someone: [
46 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
47 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
48 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.next },
49 | ],
50 | }
51 | },
52 | /**
53 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
54 | */
55 | get running() {
56 | return {
57 | step: Env.STEP.RUNNING,
58 | must: [
59 | { pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
60 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
61 | { pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.next },
62 | ],
63 | someone: [],
64 | }
65 | },
66 |
67 | /**
68 | * ... 还可以定义更多的步骤
69 | */
70 | /**
71 | * 定义页面的识别标志及具体的各操作
72 | */
73 | pages: {
74 | SELECT_CLASS: {
75 | desc: "关闭更新弹窗",
76 | name: "关闭更新弹窗",
77 | pageid: Env.PageEnum.SELECT_CLASS,
78 | mark: { id: "btn_cancel" },
79 | next: [],
80 | operates: {
81 | next: [
82 | { name: "click", mark: { id: "btn_cancel" } },
83 | ]
84 | },
85 | },
86 | LOGIN: {
87 | desc: "进入签到页按钮",
88 | name: "进入签到页按钮",
89 | /**
90 | * mark: 页面的标志控件,当页面找到匹配mark属性的控件时,我们认为它就位于这个页面
91 | * mark可能的属性:id,text,desc,className,textStartsWith,textEndsWith,
92 | * descStartsWith,descEndsWith 具体可以参考Autojs控件uiselector的函数
93 | */
94 | mark: { id: "frog_float_gif" },
95 | pageid: Env.PageEnum.LOGIN,
96 | next: [],
97 | operates: {
98 | next: [
99 | { name: "click", mark: { id: "frog_float_gif" } },
100 | ],
101 | },
102 | },
103 |
104 | HOME: {
105 | desc: "签到",
106 | name: "签到",
107 | pageid: Env.PageEnum.HOME,
108 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
109 | mark: { id: "签到" },
110 | next: [],
111 | operates: {
112 | next: [
113 | { name: "click", mark: { id: "签到" } },
114 | ],
115 | finish: [{ name: "sleep" }],
116 | },
117 | },
118 | },
119 | };
120 |
121 | /**
122 | * 初始化后执行
123 | */
124 | function afterInit() {
125 | sleep(1000);
126 | }
127 |
128 | var __curJob = JSON.parse(JSON.stringify(Job));
129 | //运行
130 | Work.main(__curJob, afterInit);
131 |
--------------------------------------------------------------------------------
/src/layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/work/test.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 测试文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * @author Tuple
5 | * @version 0.1
6 | */
7 |
8 | var Env = require('../env');
9 | var Api = require('../common/api');
10 | var Utils = require('../common/utils');
11 | var Operate = require('../common/operate');
12 | const weiboqianbao_hong = "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";
13 | const zhaoqidaka = "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";
14 |
15 | var _curRa = new RootAutomator();
16 | events.on('exit', function () {
17 | _curRa.exit();
18 | });
19 | //获取截屏的权限
20 | requestScreenCapture();
21 |
22 |
23 | function test() {
24 | // var item = {id: "mmmm||kkkkkkkk", text: "微博||我们一起||smmkkksss", desc: "555555555", className: "444444||mm5888885" };
25 | let item = {
26 | name: "微博正文", pageid: Env.PageEnum.DETAIL,
27 | mark: { id: "detail_activity_header_title_text", text: "微博正文", desc: "", className: "" },
28 | operates: {
29 | config: { loop: 1 },
30 | init: [],
31 | jobs: [
32 | //点击微博详情的关注按钮
33 | // { name: "click", mark: { id: "tv_op_button", text: "关注" } },
34 | //点击微博详情的赞按钮,两种可能
35 | // { name: "click", mark: { id: "liked", desc: "赞" } },
36 | // { name: "click", mark: { id: "tvButton", text: "赞" } },
37 | //点击微博详情的转发按钮
38 | // { name: "click", mark: { id: "forward", desc: "转发" } },
39 | // { name: "click", mark: { id: "tvButton", text: "转发" } },
40 | //点击微博详情的评论按钮
41 | // {name:"click",mark:{id:"comment",desc:"评论"}},
42 | // {name:"click",mark:{id:"tvButton",text:"评论"}},
43 | // {name:"swipe"},
44 | // {name:"swipe",param:{count:-1}},
45 | // {name:"swipe",param:{count:0}},
46 | // {name:"swipe",param:{count:5}},
47 | // {name:"swipe",param:{count:"1"}},
48 | // {name:"refresh"},
49 | // {name:"sleep"},
50 | // {name:"sleep",param:{delay:-1}},
51 | // {name:"sleep",param:{delay:0}},
52 | // {name:"sleep",param:{delay:500}},
53 | // {name:"sleep",param:{delay:""}},
54 | // {name:"desc",mark:{id:"contentTextView"}},
55 | // {name:"text",mark:{id:"tv_groupName"}},
56 | // {name:"text",mark:{id:"tvNick"},param:{set:"name"}},
57 | // {name:"set",mark:{name:"name"},param:{default:"surpaimb"}},
58 | // {name:"set",mark:{name:"title_content"},param:{default:"title is ok"}},
59 | // {name:"get",mark:{name:"title_content"}},
60 | // {name:"get",mark:{name:"name"}},
61 | // {name:"get",mark:{name:"keyword",uri:"api"},param:{set:{name:"keyword"}}},
62 | // {name:"get",mark:{name:"keyword",uri:"api"}},
63 | // {name: "set_text", mark:{id:"tv_search_keyword"},param:{get:{name:"keyword"}}},
64 | // {name:"enter"},
65 | // {name:"desc",mark:{className:"android.view.ViewGroup",desc:"我"}},
66 | // {name:"tap",mark:{className:"android.view.ViewGroup",desc:"我"}},
67 | // {name:"input",mark:{id:"edit_view"},param:{type:"reply"}}, //type:reply|code
68 | // {name:"get",mark:{name:"login_phone",uri:"api"},param:{set:{name:"phone"}}},
69 | // {name:"set_text",mark:{id:"et_phone"},param:{get:{name:"phone"}}},
70 | // {name:"click", mark:{id:"bnLogin",text:"获取验证码"}},
71 | // // {name:"get",mark:{name:"login_code",uri:"api"},param:{set:{name:"login_code"}}},
72 | // {name:"input",mark:{id:"verification_code"},param:{get:{name:"login_code",uri:"api"}}},
73 | // { name: "click", mark: { id: "next" } },
74 | // { name: "sleep" },
75 | // { name: "click", mark: { id: "next" } },
76 | // { name: "click", mark: { id: "contentTextView" }, param: { indexOf: -1 } },
77 |
78 | // {name:"click", mark:{id:"button_more_columns"}},
79 | // {name:"click", mark:{id:"text_item"}, param:{indexOf:{tag:"text",get:{name:"hot_text_item",uri:"api"}}}},
80 |
81 | // {name:"click", mark:{id:"rltitleSave"}},
82 | // {name:"exists", mark:{id:"iv_groupStateIndicator"}},
83 | // {name:"exists", mark:{id:"tv_groupName"}},
84 | // {name:"exists", mark:{className:"android.widget.TextView",text:"写微博"}},
85 | // {name:"click", mark:{className:"android.widget.TextView",text:"写微博"}},
86 | // {name:"exists", mark:{desc:"写微博"}},
87 |
88 | // { name: "click", mark: { id: "checkbox" } },
89 | // { name: "set_text", mark: { id: "edit_view" }, param: { get: { name: "comment", uri: "api" } } },
90 | // { name: "click", mark: { id: "rltitleSave" } },
91 |
92 | // {name:"click", mark:{id:"tv_content1"}, param:{indexOf:{tag:"text",try:10,get:{name:"given_weibo_title",uri:"api"}}}},
93 | //寻找指定的文章
94 | // {name:"click", mark:{id:"tv_userinfo"}, param:{indexOf:{tag:"text",try:10,get:{name:"given_weibo_title",uri:"api"}}}},
95 | // failed {name:"click", mark:{id:"tv_content1"}, param:{indexOf:{tag:"textContains", try:10,get:{name:"given_weibo_title",uri:"api"}}}},
96 | // 进入自己发布的文件列表
97 | // { name: "back"},
98 | // {name:"swipe"},
99 | // { name: "image", mark: { base64: weiboqianbao_hong }}
100 | // { name: "input", mark:{ className:"android.widget.TextView", text: "取消" },param:{get:{default:"mail.163.com"},parent:1,indexOf:{tag:"className", default:"android.view.View"}}},
101 | // { name: "sleep"},
102 | // { name: "tap", mark:{ className:"android.widget.TextView", text: "进入"}},
103 | // { name :"exists", mark:{className:"com.tencent.mtt.browser.homepage.view.fastlink.g", text: "直播交友"}},
104 | // { name :"exists", mark:{text: "进入"}},
105 | { name: "exists", mark: { className:"android.widget.Button", desc:"关注" } }, //喜欢
106 | { name: "exists", mark: { className:"android.widget.ImageView", descStartsWith:"未选中," } }, //喜欢
107 | { name: "tap", mark: { className:"android.widget.ImageView", descStartsWith:"未选中," } }, //喜欢
108 | { name: "click", mark: { className:"android.widget.ImageView", descStartsWith:"未选中," } }, //喜欢
109 | { name: "swipe"},
110 | ],
111 | // finish: [{ name: "click", mark: { id: "tv_userinfo" }, param: { indexOf: { tag: "text", try: 10, get: { name: "given_weibo_title", uri: "api" } } } }],
112 | }
113 | };
114 |
115 | //循环执行run
116 | if (!!item && !!item.operates && !!item.operates.jobs) {
117 | let loops = 1;
118 | if (!!item.operates.config.loop && item.operates.config.loop > -1) {
119 | loops = item.operates.config.loop;
120 | }
121 | while (loops > 0) {
122 | loops -= 1;
123 | for (let im of item.operates.jobs) {
124 | console.log('loop job:', loops, JSON.stringify(im));
125 | // if (Operate.isPage(item.mark)) {
126 | if (true) {
127 | let rs = Operate.doFun(im);
128 | toast(rs);
129 | console.log('do fun return', rs);
130 | } else {
131 | console.log('not in right page:', item.name);
132 | break;
133 | }
134 | }
135 | sleep(500);
136 | }
137 | }
138 |
139 | console.log('curName:', Env.curName);
140 | console.log('curTitleContent:', Env.curTitleContent);
141 | console.log('curKeyword:', Env.curKeyword);
142 | console.log('curHotTextItem:', Env.curHotTextItem);
143 |
144 | // var ls = Operate.parseItem(item);
145 | // console.log("length:"+ls.length+":"+JSON.stringify(ls));
146 | }
147 |
148 |
149 | test();
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/src/work/云闪付-签到.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | /**
24 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
25 | */
26 | var Job = {
27 | CLIENT: '云闪付-签到',
28 | package: 'com.unionpay',
29 | activity: "com.unionpay.activity.UPActivityMain",
30 | /**
31 | * @description 默认配置,自动加载
32 | */
33 | get default() {
34 | return {
35 | /**
36 | * @description steps定义当前任务需要完成工作的步骤
37 | */
38 | steps: [this.running],
39 | /**
40 | * @description 指定某一步骤的最大重复次数
41 | */
42 | maxTimes: [-1],
43 | /**
44 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
45 | */
46 | someone: [
47 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
48 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
49 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.next },
50 | ],
51 | }
52 | },
53 | /**
54 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
55 | */
56 | get running() {
57 | return {
58 | step: Env.STEP.RUNNING,
59 | must: [
60 | { pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
61 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
62 | { pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.next },
63 | ],
64 | someone: [],
65 | }
66 | },
67 |
68 | /**
69 | * ... 还可以定义更多的步骤
70 | */
71 | /**
72 | * 定义页面的识别标志及具体的各操作
73 | */
74 | pages: {
75 | SELECT_CLASS: {
76 | desc: "关闭更新弹窗",
77 | name: "关闭更新弹窗",
78 | pageid: Env.PageEnum.SELECT_CLASS,
79 | mark: { id: "btn_cancel" },
80 | next: [],
81 | operates: {
82 | next: [
83 | { name: "click", mark: { id: "btn_cancel" } },
84 | ]
85 | },
86 | },
87 | LOGIN: {
88 | desc: "进入签到页按钮",
89 | name: "进入签到页按钮",
90 | /**
91 | * mark: 页面的标志控件,当页面找到匹配mark属性的控件时,我们认为它就位于这个页面
92 | * mark可能的属性:id,text,desc,className,textStartsWith,textEndsWith,
93 | * descStartsWith,descEndsWith 具体可以参考Autojs控件uiselector的函数
94 | */
95 | mark: { id: "frog_float_gif" },
96 | pageid: Env.PageEnum.LOGIN,
97 | next: [],
98 | operates: {
99 | next: [
100 | { name: "click", mark: { id: "frog_float_gif" } },
101 | ],
102 | },
103 | },
104 |
105 | HOME: {
106 | desc: "签到",
107 | name: "签到",
108 | pageid: Env.PageEnum.HOME,
109 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
110 | mark: { id: "签到" },
111 | next: [],
112 | operates: {
113 | next: [
114 | { name: "click", mark: { text: "签到" } },
115 | ],
116 | finish: [{ name: "sleep" }],
117 | },
118 | },
119 | },
120 | };
121 |
122 | /**
123 | * 初始化后执行
124 | */
125 | function afterInit() {
126 | sleep(1000);
127 | }
128 |
129 | var __curJob = JSON.parse(JSON.stringify(Job));
130 | //运行
131 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/src/work/叮咚买菜-签到.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | /**
24 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
25 | */
26 | var Job = {
27 | version: '9.0.2',
28 | CLIENT: '叮咚买菜-签到',
29 | package: 'com.yaya.zone',
30 | activity: "com.yaya.zone.activity.HomeActivity",
31 | /**
32 | * @description 默认配置,自动加载
33 | */
34 | get default() {
35 | return {
36 | /**
37 | * @description steps定义当前任务需要完成工作的步骤
38 | */
39 | steps: [this.running],
40 | /**
41 | * @description 指定某一步骤的最大重复次数
42 | */
43 | maxTimes: [-1],
44 | /**
45 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
46 | */
47 | someone: [
48 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.UPDATED, jobs: this.pages.UPDATED.operates.next },
49 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next},
50 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next},
51 | // { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next},
52 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit:true},
53 | ],
54 | }
55 | },
56 | /**
57 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
58 | */
59 | get running() {
60 | return {
61 | step: Env.STEP.RUNNING,
62 | must: [
63 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
64 | { pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next },
65 | { pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit:true },
66 | ],
67 | someone: [],
68 | }
69 | },
70 |
71 | /**
72 | * ... 还可以定义更多的步骤
73 | */
74 | /**
75 | * 定义页面的识别标志及具体的各操作
76 | */
77 | pages: {
78 | UPDATED: {
79 | desc: "关闭弹窗",
80 | name: "关闭弹窗",
81 | pageid: Env.PageEnum.UPDATED,
82 | mark: { id: "iv_image" },
83 | next: [],
84 | operates: {
85 | next: [
86 | { name: "click", mark: { id: "iv_close" } },
87 | ]
88 | },
89 | },
90 |
91 |
92 | MINE: {
93 | desc: "个人中心",
94 | name: "个人中心",
95 | pageid: Env.PageEnum.MINE,
96 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
97 | mark: { id: "avatar" },
98 | next: [],
99 | operates: {
100 | next: [
101 | { name: "click", mark: { id: "rl_sign" } },
102 | { name: "sleep"},
103 | ],
104 | finish: [{ name: "back" }],
105 | },
106 | },
107 |
108 |
109 | HOME: {
110 | desc: "首页",
111 | name: "首页",
112 | pageid: Env.PageEnum.HOME,
113 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
114 | mark: { id: "ll_addr" },
115 | next: [],
116 | operates: {
117 | next: [
118 | { name: "click", mark: { id: "tab_rb_me" } },
119 | { name: "sleep"},
120 | ],
121 | finish: [{ name: "back" }],
122 | },
123 | },
124 |
125 | SIGEN: {
126 | desc: "我在这里",
127 | name: "我在这里",
128 | pageid: Env.PageEnum.SIGEN,
129 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
130 | mark: { id:"tv_title_text", text: "我在这里" },
131 | next: [],
132 | operates: {
133 | next: [
134 | { name: "click", mark: { text: "不选择地点" } },
135 | { name: "sleep"},
136 | { name: "click", mark: { id: "sign_name" } },
137 | { name: "sleep"},
138 | ],
139 | },
140 | },
141 |
142 | HOME_MESSAGE: {
143 | desc: "签到成功",
144 | name: "签到成功",
145 | pageid: Env.PageEnum.HOME_MESSAGE,
146 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
147 | mark: { id:"center_tv"},
148 | next: [],
149 | operates: {
150 | next: [
151 | { name: "click", mark: { id: "left_navigation_ll" } },
152 | { name: "sleep"},
153 | ],
154 | finish: [{ name: "back" }],
155 | },
156 | },
157 | },
158 | };
159 |
160 | /**
161 | * 初始化后执行
162 | */
163 | function afterInit() {
164 | sleep(1000);
165 | }
166 |
167 | var __curJob = JSON.parse(JSON.stringify(Job));
168 | //运行
169 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/src/work/微博-登录.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 | var Work = require('../common/work');
20 | var Env = require('../env');
21 |
22 | /**
23 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
24 | */
25 | var Job = {
26 | version: '9.6.3',
27 | CLIENT: 'weibo',
28 | package: 'com.sina.weibo',
29 | activity: "com.sina.weibo.MainTabActivity",
30 |
31 | /**
32 | * @description 默认配置,自动加载
33 | */
34 | get default() {
35 | return {
36 | /**
37 | * @description steps定义当前任务需要完成工作的步骤
38 | */
39 | steps: [this.login, this.nickname, this.write, this.logout],
40 | /**
41 | * @description 指定某一步骤的最大重复次数
42 | */
43 | maxTimes: [-1, -1, 3, -1],
44 | /**
45 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
46 | */
47 | someone: [
48 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.UNKNOW, jobs: this.pages.UNKNOW.operates.next },
49 | { next: Env.STEP.LOGIN, pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.login },
50 | { next: Env.STEP.LOGIN, pageid: Env.PageEnum.INPUT_CODE, jobs: this.pages.INPUT_CODE.operates.code },
51 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.DETAIL, jobs: this.pages.DETAIL.operates.follow },
52 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.write },
53 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.write },
54 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.nickname },
55 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.home },
56 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.WRITE_WEIBO, jobs: this.pages.WRITE_WEIBO.operates.write },
57 | { next: Env.STEP.WRITE, pageid: Env.PageEnum.EDIT_SHARE, jobs: this.pages.EDIT_SHARE.operates.comment },
58 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.setting },
59 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.SETTING, jobs: this.pages.SETTING.operates.accounts },
60 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNTS, jobs: this.pages.ACCOUNTS.operates.add },
61 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_2, jobs: this.pages.ACCOUNT_ERROR_2.operates.next },
62 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_3, jobs: this.pages.ACCOUNT_ERROR_3.operates.next },
63 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_4, jobs: this.pages.ACCOUNT_ERROR_4.operates.next },
64 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_5, jobs: this.pages.ACCOUNT_ERROR_5.operates.next },
65 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_CONFIRM, jobs: this.pages.ACCOUNT_CONFIRM.operates.finish },
66 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR, jobs: this.pages.ACCOUNT_ERROR.operates.cancel },
67 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
68 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.USER_CENTER, jobs: this.pages.USER_CENTER.operates.next },
69 | ],
70 | }
71 | },
72 | /**
73 | * @description Login步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
74 | */
75 | get login() {
76 | return {
77 | step: Env.STEP.LOGIN,
78 | must: [
79 | { pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.login },
80 | { pageid: Env.PageEnum.INPUT_CODE, jobs: this.pages.INPUT_CODE.operates.code },
81 | ],
82 | someone: [
83 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.mine },
84 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.mine },
85 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.ACCOUNT_CONFIRM, jobs: this.pages.ACCOUNT_CONFIRM.operates.finish },
86 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR, jobs: this.pages.ACCOUNT_ERROR.operates.cancel },
87 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.WELCOME_CAMEBACK, jobs: this.pages.WELCOME_CAMEBACK.operates.next },
88 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
89 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.RECOMMEND, jobs: this.pages.RECOMMEND.operates.next },
90 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
91 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.USER_CENTER, jobs: this.pages.USER_CENTER.operates.next },
92 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.WELCOME_WEIBO, jobs: this.pages.WELCOME_WEIBO.operates.next },
93 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_2, jobs: this.pages.ACCOUNT_ERROR_2.operates.next },
94 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_3, jobs: this.pages.ACCOUNT_ERROR_3.operates.next },
95 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_4, jobs: this.pages.ACCOUNT_ERROR_4.operates.next },
96 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_5, jobs: this.pages.ACCOUNT_ERROR_5.operates.next },
97 | { next: Env.STEP.LOGOUT, pageid: Env.PageEnum.ACCOUNT_ERROR_6, jobs: this.pages.ACCOUNT_ERROR_6.operates.next },
98 | ],
99 | }
100 |
101 | },
102 | /**
103 | * 写微博
104 | */
105 | get write() {
106 | return {
107 | step: Env.STEP.WRITE,
108 | must: [
109 | { isLogined: true, pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.write },
110 | { isLogined: true, pageid: Env.PageEnum.WRITE_WEIBO, jobs: this.pages.WRITE_WEIBO.operates.write },
111 | { isLogined: true, pageid: Env.PageEnum.EDIT_SHARE, jobs: this.pages.EDIT_SHARE.operates.comment },
112 | ],
113 | someone: [],
114 | }
115 | },
116 | /**
117 | * 退出登录
118 | */
119 | get logout() {
120 | return {
121 | step: Env.STEP.LOGOUT,
122 | must: [
123 | { pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.mine },
124 | { pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.setting },
125 | { pageid: Env.PageEnum.SETTING, jobs: this.pages.SETTING.operates.accounts },
126 | { pageid: Env.PageEnum.ACCOUNTS, jobs: this.pages.ACCOUNTS.operates.add },
127 | ],
128 | someone: [],
129 | }
130 | },
131 | /**
132 | * 获取登录昵称
133 | */
134 | get nickname() {
135 | return {
136 | step: Env.STEP.NICKNAME,
137 | must: [
138 | { pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.mine },
139 | { pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.nickname },
140 | ],
141 | someone: [],
142 | }
143 | },
144 | /**
145 | * ... 还可以定义更多的步骤
146 | */
147 | /**
148 | * 定义页面的识别标志及具体的各操作
149 | */
150 | pages: {
151 | UNKNOW: {
152 | desc: "未知页面",
153 | name: "未知页面",
154 | pageid: Env.PageEnum.UNKNOW,
155 | mark: { name: "unknow" },
156 | next: [],
157 | operates: {
158 | next: [
159 | { name: "click", mark: { className: "android.widget.TextView", text:"以后再说" } },
160 | ]
161 | },
162 | },
163 | LOGIN: {
164 | desc: "登陆页输入手机号",
165 | name: "登录",
166 | /**
167 | * mark: 页面的标志控件,当页面找到匹配mark属性的控件时,我们认为它就位于这个页面
168 | * mark可能的属性:id,text,desc,className,textStartsWith,textEndsWith,
169 | * descStartsWith,descEndsWith 具体可以参考Autojs控件uiselector的函数
170 | */
171 | mark: { id: "", text: "登录注册更精彩", desc: "", className: "android.widget.TextView" },
172 | pageid: Env.PageEnum.LOGIN,
173 | next: [],
174 | /**
175 | * 定义这个页面可以的操作:name是操作名称目前支持
176 | * get 获取本地或者远程文本并写到全局变量,调用operate.js中的do函数处理,
177 | * set_text 设置控件的text属性,调用operate.js中的do函数处理,
178 | * click 点击这个按钮,调用operate.js中的do函数处理,
179 | * input OneByOne向控件输入文字,调用operate.js中的do函数处理,
180 | * swipe 滑动页面,调用operate.js中的do函数处理,
181 | * sleep 暂停,调用operate.js中的do函数处理,
182 | * refresh 下拉刷新页面,调用operate.js中的do函数处理,
183 | * back 点击Android的返回键,调用operate.js中的do函数处理,
184 | * text 获取控件的text属性值,调用operate.js中的do函数处理,
185 | * desc 获取控件的desc描述值,调用operate.js中的do函数处理,
186 | * tap 点击控件位置的屏幕,调用operate.js中的do函数处理,
187 | * enter 触发回车,调用operate.js中的do函数处理,
188 | */
189 | operates: {
190 | login: [
191 | { name: "get", mark: { name: "login_phone", uri: "api" }, param: { set: { name: "phone" } } },
192 | { name: "set_text", mark: { id: "et_phone" }, param: { get: { name: "phone" } } },
193 | { name: "click", mark: { id: "bnLogin", text: "获取验证码" } },
194 | ],
195 | },
196 | },
197 | INPUT_CODE: {
198 | desc: "验证码输入页",
199 | name: "请输入验证码", pageid: Env.PageEnum.INPUT_CODE, mark: { id: "tv_verification_title", text: "请输入验证码", desc: "", className: "" },
200 | next: [],
201 | operates: {
202 | code: [
203 | { name: "input", mark: { id: "verification_code" }, param: { get: { name: "login_code", uri: "api" } } },
204 | ],
205 | finish: [{ name: "back" }],
206 | },
207 | },
208 | ACCOUNT_CONFIRM: {
209 | desc: "帐号确认",
210 | name: "帐号确认", pageid: Env.PageEnum.ACCOUNT_CONFIRM, mark: { id: "", text: "帐号确认", desc: "", className: "android.widget.TextView" },
211 | next: [],
212 | operates: {
213 | finish: [{ name: "back" }],
214 | },
215 | },
216 | DETAIL: {
217 | desc: "微博正文",
218 | name: "微博正文", pageid: Env.PageEnum.DETAIL,
219 | mark: { id: "detail_activity_header_title_text", text: "微博正文", desc: "", className: "" },
220 | next: [],
221 | operates: {
222 | follow: [
223 | //点击微博详情的关注按钮
224 | { name: "click", mark: { id: "tv_op_button", text: "关注" } },
225 | ],
226 | liked: [
227 | //点击微博详情的赞按钮,两种可能
228 | { name: "click", mark: { id: "liked", desc: "赞" } },
229 | { name: "click", mark: { id: "tvButton", text: "赞" } },
230 | ],
231 | forward: [
232 | //点击微博详情的转发按钮
233 | { name: "click", mark: { id: "forward", desc: "转发" } },
234 | { name: "click", mark: { id: "tvButton", text: "转发" } },
235 | ],
236 | finish: [{ name: "back" }],
237 | },
238 | },
239 | MINE: {
240 | desc: "我",
241 | name: "我", pageid: Env.PageEnum.MINE, mark: { id: "titleText", text: "我", desc: "", className: "" },
242 | next: [],
243 | operates: {
244 | nickname: [
245 | //取用户昵称,保存到环境变量name
246 | { name: "text", mark: { id: "tvNick" }, param: { set: "name" } },
247 | //
248 | ],
249 | home: [
250 | // 首页
251 | { name: "click", mark: { desc: "首页" } },
252 | ],
253 | setting: [
254 | // 点设置
255 | { name: "click", mark: { id: "rltitleSave" } },
256 | ],
257 | finish: [{ name: "back" }],
258 | },
259 | },
260 | SETTING: {
261 | desc: "设置",
262 | name: "设置", pageid: Env.PageEnum.SETTING, mark: { id: "titleText", text: "设置", desc: "", className: "" },
263 | next: [],
264 | operates: {
265 | accounts: [
266 | { name: "click", mark: { id: "accountLayout" } }
267 | ],
268 | finish: [{ name: "back" }],
269 | },
270 | },
271 | ACCOUNTS: {
272 | desc: "帐号管理",
273 | name: "帐号管理", pageid: Env.PageEnum.ACCOUNTS, mark: { id: "titleText", text: "帐号管理", desc: "", className: "" },
274 | next: [],
275 | operates: {
276 | add: [
277 | { name: "click", mark: { id: "tvAccountName", text: "添加帐号" } }
278 | ],
279 | finish: [{ name: "back" }],
280 | },
281 | },
282 | HOME_FOLLOW: {
283 | desc: "首页关注",
284 | name: "首页关注", pageid: Env.PageEnum.HOME_FOLLOW, mark: { id: "iv_groupStateIndicator", className: "android.widget.ImageView" },
285 | next: [],
286 | operates: {
287 | mine: [
288 | { name: "click", mark: { desc: "我" } },
289 | ],
290 | write: [
291 | { name: "click", mark: { id: "rltitleSave" } },
292 | ],
293 | search: [
294 | { name: "tap", mark: { id: "tv_search_keyword" } },
295 | ],
296 | find: [
297 | //写完后找到刚才的文章
298 | { name: "click", mark: { id: "tv_userinfo" }, param: { indexOf: { tag: "text", try: 10, get: { name: "given_weibo_title", uri: "api" } } } }
299 | ],
300 | finish: [{ name: "swipe" }],
301 | },
302 | },
303 | HOME_HOT: {
304 | desc: "首页热门",
305 | name: "首页热门", pageid: Env.PageEnum.HOME_HOT, mark: { id: "tv_groupName", text: "热门", desc: "", className: "" },
306 | next: [],
307 | operates: {
308 | mine: [
309 | { name: "click", mark: { desc: "我" } },
310 | ],
311 | write: [
312 | { name: "click", mark: { id: "rltitleSave" } },
313 | ],
314 | search: [
315 | { name: "tap", mark: { id: "tv_search_keyword" } },
316 | ],
317 | select_item: [
318 | //选择热门栏目
319 | { name: "click", mark: { id: "button_more_columns" } },
320 | { name: "click", mark: { id: "text_item" }, param: { indexOf: { tag: "text", get: { name: "hot_text_item", uri: "api" } } } },
321 | ],
322 | detail: [//点击列表,跳到微博详情页面
323 | { name: "click", mark: { id: "contentTextView" }, param: { indexOf: -1 } }
324 | ],
325 | finish: [{ name: "swipe" }],
326 | },
327 | },
328 | SEARCH: {
329 | desc: "搜索页",
330 | name: "搜索页", pageid: Env.PageEnum.SEARCH, mark: { id: "btn_search_or_back", text: "", desc: "", className: "" },
331 | next: [],
332 | operates: {
333 | keyword: [
334 | { name: "get", mark: { name: "keyword", uri: "api" }, param: { set: { name: "keyword" } } },
335 | { name: "set_text", mark: { id: "tv_search_keyword" }, param: { get: { name: "keyword" } } },
336 | { name: "enter" },
337 | ],
338 | finish: [{ name: "swipe" }],
339 | },
340 | },
341 | EDIT_SHARE: {
342 | desc: "转发微博",
343 | name: "转发微博", pageid: Env.PageEnum.EDIT_SHARE, mark: { id: "titleText", textEndsWith: "发微博" },
344 | next: [],
345 | operates: {
346 | comment: [
347 | { name: "click", mark: { id: "checkbox" } },
348 | { name: "set_text", mark: { id: "edit_view" }, param: { get: { name: "comment", uri: "api" } } },
349 | { name: "click", mark: { id: "rltitleSave" } },
350 | ]
351 | },
352 | },
353 | HOME_SEARCH: {
354 | desc: "首页搜索",
355 | name: "首页搜索", pageid: Env.PageEnum.HOME_SEARCH, mark: { id: "textView_title", text: "微博热搜", desc: "", className: "android.widget.TextView" },
356 | next: [],
357 | operates: {
358 | search: [
359 | { name: "tap", mark: { id: "tv_search_keyword" } },
360 | ],
361 | finish: [{ name: "swipe" }],
362 | },
363 | },
364 | ADD_FOLLOW_WITH_SHARE: {
365 | desc: "加关注才能转发",
366 | name: "加关注才能转发", pageid: Env.PageEnum.ADD_FOLLOW_WITH_SHARE, mark: { className: "android.widget.TextView", text: "由于对方的设置,你需要先关注他,才能评论。" },
367 | next: [],
368 | operates: {
369 | follow: [{ name: "click", mark: { className: "android.widget.TextView", text: "加关注" } }],
370 | },
371 | },
372 | ACCOUNT_ERROR: {
373 | desc: "帐号异常",
374 | name: "帐号异常", pageid: Env.PageEnum.ACCOUNT_ERROR, mark: { className: "android.widget.TextView", text: "帐号异常" },
375 | next: [],
376 | operates: {
377 | cancel: [
378 | { name: "click", mark: { className: "android.widget.TextView", text: "取消" } },
379 | ]
380 | },
381 | },
382 | WELCOME_CAMEBACK: {
383 | desc: "好久不见,欢迎回来",
384 | name: "好久不见,欢迎回来", pageid: Env.PageEnum.WELCOME_CAMEBACK, mark: { id: "tv_top_title", text: "好久不见,欢迎回来" },
385 | next: [],
386 | operates: {
387 | next: [
388 | { name: "click", mark: { id: "next" } },
389 | { name: "sleep" },
390 | { name: "click", mark: { id: "next" } },
391 | ]
392 | },
393 | },
394 | WRITE_WEIBO: {
395 | desc: "首页上写微博",
396 | name: "首页上写微博", pageid: Env.PageEnum.WRITE_WEIBO, mark: { className: "android.widget.TextView", text: "写微博" },
397 | next: [],
398 | operates: {
399 | write: [
400 | { name: "click", mark: { className: "android.widget.TextView", text: "写微博" } },
401 | ],
402 | },
403 | },
404 | SELECT_CLASS: {
405 | desc: "选择你感兴趣的分类",
406 | name: "选择你感兴趣的分类", pageid: Env.PageEnum.SELECT_CLASS, mark: { id: "tv_top_title", text: "选择你感兴趣的分类", desc: "", className: "" },
407 | next: [],
408 | operates: {
409 | next: [
410 | { name: "click", mark: { id: "next" } },
411 | ]
412 | },
413 | },
414 | RECOMMEND: {
415 | desc: "为你推荐以下博主",
416 | name: "为你推荐以下博主", pageid: Env.PageEnum.RECOMMEND, mark: { id: "", text: "为你推荐以下博主", desc: "", className: "" },
417 | next: [],
418 | operates: {
419 | next: [
420 | { name: "click", mark: { id: "next" } },
421 | ]
422 | },
423 | },
424 | SIGEN: {
425 | desc: "连续签到领取红包",
426 | name: "马上参与", pageid: Env.PageEnum.SIGEN, mark: { id: "iv_content" },
427 | next: [
428 | ],
429 | operates: {
430 | next: [
431 | { name: "click", mark: { id: "iv_content" } }
432 | ],
433 | finish: [{ name: "back" }],
434 | },
435 | },
436 | USER_CENTER: {
437 | desc: "用户任务中心",
438 | name: "用户任务中心", pageid: Env.PageEnum.USER_CENTER, mark: { id: "titleText", text: "用户任务中心", desc: "", className: "" },
439 | next: [
440 | ],
441 | operates: {
442 | next: [
443 | { name: "click", mark: { className: "android.view.View", desc: "连续签到有大红包奖励!做任务获补签机会,越努力越幸运!" }, param: { parent: 1, indexOf: { tag: "clickable", default: 'true' } } }
444 | ],
445 | finish: [{ name: "back" }],
446 | },
447 | },
448 | USER_WEIBO: {
449 | desc: "用户微博",
450 | name: "微博", pageid: Env.PageEnum.USER_WEIBO, mark: { id: "titleText", text: "微博", desc: "", className: "" },
451 | next: [],
452 | operates: {
453 | finish: [{ name: "back" }],
454 | },
455 | },
456 | HOME_MESSAGE: {
457 | desc: "消息",
458 | name: "消息", pageid: Env.PageEnum.HOME_MESSAGE, mark: { id: "tab_text_view", text: "消息", desc: "", className: "android.widget.TextView" },
459 | next: [],
460 | operates: {
461 | finish: [{ name: "back" }],
462 | },
463 | },
464 | WELCOME_WEIBO: {
465 | desc: "欢迎继续使用微博",
466 | name: "欢迎继续使用微博", pageid: Env.PageEnum.WELCOME_WEIBO, mark: { className: "android.widget.TextView", text: "欢迎继续使用微博" },
467 | next: [],
468 | operates: {
469 | next: [{ name: "click", mark: { id: "bt_next", text: "查看推荐" } }],
470 | find: [
471 | { name: "click", mark: { id: "tv_userinfo" }, param: { indexOf: { tag: "text", try: 10, get: { name: "given_weibo_title", uri: "api" } } } }
472 | ],
473 | finish: [{ name: "swipe" }],
474 | },
475 | },
476 | ACCOUNT_ERROR_2: {
477 | desc: "帐号异常",
478 | name: "帐号异常", pageid: Env.PageEnum.ACCOUNT_ERROR_2, mark: { className: "android.widget.TextView", text: "解除异常" },
479 | next: [],
480 | operates: {
481 | next: [
482 | { name: "click", mark: { className: "android.widget.TextView", text: "取消" } },
483 | ],
484 | finish: [{ name: "back" }],
485 | },
486 | },
487 | ACCOUNT_ERROR_3: {
488 | desc: "帐号异常",
489 | name: "帐号异常", pageid: Env.PageEnum.ACCOUNT_ERROR_3, mark: { className: "android.widget.TextView", text: "知道了" },
490 | next: [],
491 | operates: {
492 | next: [
493 | { name: "click", mark: { className: "android.widget.TextView", text: "知道了" } },
494 | ],
495 | finish: [{ name: "back" }],
496 | },
497 | },
498 | ACCOUNT_ERROR_4: {
499 | desc: "帐号异常",
500 | name: "帐号异常", pageid: Env.PageEnum.ACCOUNT_ERROR_4, mark: { id: "tvContent", className: "android.widget.TextView", text: "有内容发送失败,已存入草稿箱" },
501 | next: [],
502 | operates: {
503 | next: [
504 | { name: "click", mark: { desc: "我" } },
505 | ],
506 | finish: [{ name: "back" }],
507 | },
508 | },
509 | ACCOUNT_ERROR_5: {
510 | desc: "帐号异常,请先验证身份",
511 | name: "帐号异常,请先验证身份", pageid: Env.PageEnum.ACCOUNT_ERROR_5, mark: { id: "titleText", className: "android.widget.TextView", text: "请先验证身份" },
512 | next: [],
513 | operates: {
514 | next: [
515 | { name: "click", mark: { id: "titleLeft" } },
516 | { name: "click", mark: { id: "tv_title_bar_back" } },
517 | ],
518 | finish: [{ name: "back" }],
519 | },
520 | },
521 | ACCOUNT_ERROR_6: {
522 | desc: "清除数据",
523 | name: "清除数据", pageid: Env.PageEnum.ACCOUNT_ERROR_6, mark: { id: "btn_restart", text: "清除数据" },
524 | next: [],
525 | operates: {
526 | next: [
527 | { name: "click", mark: { id: "btn_restart" } },
528 | ],
529 | skip: [
530 | { name: "click", mark: { id: "btn_skip" } },
531 | ],
532 | finish: [{ name: "back" }],
533 | },
534 | },
535 | },
536 | };
537 |
538 | /**
539 | * 初始化后执行
540 | */
541 | function afterInit() {
542 | sleep(1000);
543 | }
544 |
545 | var __curJob = JSON.parse(JSON.stringify(Job));
546 | //运行
547 | Work.main(Job, afterInit);
548 |
549 |
550 |
551 |
--------------------------------------------------------------------------------
/src/work/拼多多-签到.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | /**
24 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
25 | */
26 | var Job = {
27 | version: '4.68.0',
28 | CLIENT: '拼多多-签到',
29 | package: 'com.xunmeng.pinduoduo',
30 | activity: "com.xunmeng.pinduoduo.ui.activity.HomeActivity",
31 | /**
32 | * @description 默认配置,自动加载
33 | */
34 | get default() {
35 | return {
36 | /**
37 | * @description steps定义当前任务需要完成工作的步骤
38 | */
39 | steps: [this.running],
40 | /**
41 | * @description 指定某一步骤的最大重复次数
42 | */
43 | maxTimes: [-1],
44 | /**
45 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
46 | */
47 | someone: [
48 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.UNKNOW, jobs: this.pages.UNKNOW.operates.next },
49 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
50 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next },
51 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
52 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit: true },
53 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.RED_PAGE, jobs: this.pages.RED_PAGE.operates.next },
54 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.RED_BUY_PAGE, jobs: this.pages.RED_BUY_PAGE.operates.next },
55 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.RED_FRIEND_PAGE, jobs: this.pages.RED_FRIEND_PAGE.operates.next, exit: true },
56 | ],
57 | }
58 | },
59 | /**
60 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
61 | */
62 | get running() {
63 | return {
64 | step: Env.STEP.RUNNING,
65 | must: [
66 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
67 | { pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
68 | { pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit: true },
69 | { pageid: Env.PageEnum.RED_PAGE, jobs: this.pages.RED_PAGE.operates.next },
70 | { pageid: Env.PageEnum.RED_BUY_PAGE, jobs: this.pages.RED_BUY_PAGE.operates.next },
71 | { pageid: Env.PageEnum.RED_FRIEND_PAGE, jobs: this.pages.RED_FRIEND_PAGE.operates.next, exit: true },
72 | ],
73 | someone: [],
74 | }
75 | },
76 |
77 | /**
78 | * ... 还可以定义更多的步骤
79 | */
80 | /**
81 | * 定义页面的识别标志及具体的各操作
82 | */
83 | pages: {
84 | UNKNOW: {
85 | desc: "未知页面",
86 | name: "未知页面",
87 | pageid: Env.PageEnum.UNKNOW,
88 | mark: { id: "tv_title" },
89 | next: [],
90 | operates: {
91 | next: [
92 | { name: "click", mark: { id: "h_" } },
93 | { name: "click", mark: { id: "i_" } },
94 | { name: "click", mark: { id: "ii_" } },
95 | { name: "click", mark: { id: "is" } },
96 | ]
97 | },
98 | },
99 |
100 |
101 | MINE: {
102 | desc: "个人中心",
103 | name: "个人中心",
104 | pageid: Env.PageEnum.MINE,
105 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
106 | mark: { id: "azs", className: "android.widget.ImageView", },
107 | next: [],
108 | operates: {
109 | next: [
110 | // { name: "click", mark: { id: "user_head_portrait_icon" } },
111 | // { name: "sleep"},
112 | { name: "click", mark: { className: "android.widget.TextView", text: "首页" } },
113 | { name: "sleep" },
114 | ],
115 | finish: [{ name: "back" }],
116 | },
117 | },
118 |
119 |
120 | HOME: {
121 | desc: "首页",
122 | name: "首页",
123 | pageid: Env.PageEnum.HOME,
124 | mark: { text: "现金签到" },
125 | next: [],
126 | operates: {
127 | next: [
128 | { name: "click", mark: { text: "现金签到" } },
129 | { name: "sleep" },
130 | ],
131 | finish: [{ name: "back" }],
132 | },
133 | },
134 |
135 | SIGEN: {
136 | desc: "签到领现金",
137 | name: "签到领现金",
138 | pageid: Env.PageEnum.SIGEN,
139 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
140 | mark: { id: "tv_title", text: "签到领现金" },
141 | next: [],
142 | operates: {
143 | next: [
144 | { name: "click", mark: { className: "android.view.View", text: "签到领现金" } },
145 | { name: "sleep" },
146 | { name: "back" },
147 | ],
148 | },
149 | },
150 |
151 | RED_PAGE: {
152 | desc: "定时领红包",
153 | name: "定时领红包",
154 | pageid: Env.PageEnum.RED_PAGE,
155 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
156 | mark: { id: "tv_title", text: "定时领红包" },
157 | next: [],
158 | operates: {
159 | next: [
160 | { name: "click", mark: { className: "android.widget.Image", text: "daily_bonus_mid_limited_reward_btn" } },
161 | { name: "sleep" },
162 | { name: "click", mark: { className: "android.view.View", text: "选我" } },
163 | { name: "sleep" },
164 | ],
165 | finish: [
166 | { name: "back" },
167 | { name: "back" },
168 | ],
169 | },
170 | },
171 |
172 | RED_FRIEND_PAGE: {
173 | desc: "好友红包",
174 | name: "好友红包",
175 | pageid: Env.PageEnum.RED_FRIEND_PAGE,
176 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
177 | mark: { id: "tv_title", text: "好友红包" },
178 | next: [],
179 | operates: {
180 | next: [
181 | { name: "click", mark: { className: "android.view.View", text: "官方账号" }, param: { parent: 1, indexOf: { tag: "clickable", default: "true" } } },
182 | { name: "sleep" },
183 | { name: "click", mark: { className: "android.view.View", text: "拼多多签到" }, param: { parent: 1, indexOf: { tag: "clickable", default: "true" } } },
184 | { name: "sleep" },
185 | ],
186 | finish: [
187 | { name: "back" },
188 | { name: "back" },
189 | ],
190 | },
191 | },
192 |
193 |
194 | RED_BUY_PAGE: {
195 | desc: "拼单返现",
196 | name: "拼单返现",
197 | pageid: Env.PageEnum.RED_BUY_PAGE,
198 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
199 | mark: { id: "tv_title", text: "拼单返现" },
200 | next: [],
201 | operates: {
202 | next: [
203 | { name: "swipe", param: { count: 20 } },
204 | { name: "back" },
205 | { name: "click", mark: { className: "android.view.View", text: "不赚钱,离开" } },
206 | { name: "sleep" },
207 | ],
208 | finish: [
209 | { name: "back" },
210 | { name: "back" },
211 | ],
212 | },
213 | },
214 |
215 | HOME_MESSAGE: {
216 | desc: "今日已签到,请明天再来",
217 | name: "今日已签到,请明天再来",
218 | pageid: Env.PageEnum.HOME_MESSAGE,
219 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
220 | mark: { className: "android.view.View", text: "今日已签到,请明天再来" },
221 | next: [],
222 | operates: {
223 | next: [
224 | { name: "click", mark: { className: "android.view.View", text: "定时领红包" } },
225 | { name: "sleep" },
226 | { name: "click", mark: { className: "android.view.View", text: "抢红包" } },
227 | { name: "sleep" },
228 | { name: "back" },
229 | { name: "click", mark: { className: "android.view.View", text: "逛街领红包" } },
230 | { name: "sleep" },
231 | { name: "back" },
232 |
233 | ],
234 | finish: [{ name: "back" }],
235 | },
236 | },
237 | },
238 | };
239 |
240 | /**
241 | * 初始化后执行
242 | */
243 | function afterInit() {
244 | sleep(1000);
245 | }
246 |
247 | var __curJob = JSON.parse(JSON.stringify(Job));
248 | //运行
249 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/src/work/新浪微博-早起打卡.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | // const wb_wz = "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";
24 | const wbqianbao_logo = "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";
25 | // const wbqianbao_wz = "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";
26 | const weiboqianbao_hong = "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";
27 | const zhaoqidaka = "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";
28 |
29 |
30 | /**
31 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
32 | */
33 | var Job = {
34 | version: '9.6.3',
35 | CLIENT: '新浪微博-早起打卡',
36 | package: 'com.sina.weibo',
37 | activity: "com.sina.weibo.MainTabActivity",
38 | /**
39 | * @description 默认配置,自动加载
40 | */
41 | get default() {
42 | return {
43 | /**
44 | * @description steps定义当前任务需要完成工作的步骤
45 | */
46 | steps: [this.running],
47 | /**
48 | * @description 指定某一步骤的最大重复次数
49 | */
50 | maxTimes: [-1],
51 | /**
52 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
53 | */
54 | someone: [
55 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.UNKNOW, jobs: this.pages.UNKNOW.operates.next },
56 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.next },
57 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_FOLLOW, jobs: this.pages.HOME_FOLLOW.operates.next },
58 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next },
59 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
60 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit: true },
61 | ],
62 | }
63 | },
64 | /**
65 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
66 | */
67 | get running() {
68 | return {
69 | step: Env.STEP.RUNNING,
70 | must: [
71 | { pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.next },
72 | { pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next },
73 | { pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
74 | { pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit: true },
75 | ],
76 | someone: [],
77 | }
78 | },
79 |
80 | /**
81 | * ... 还可以定义更多的步骤
82 | */
83 | /**
84 | * 定义页面的识别标志及具体的各操作
85 | */
86 | pages: {
87 | UNKNOW: {
88 | desc: "关闭弹窗",
89 | name: "关闭弹窗",
90 | pageid: Env.PageEnum.UNKNOW,
91 | mark: { name: "unknow" },
92 | next: [],
93 | operates: {
94 | next: [
95 | { name: "click", mark: { id: "cancel_update" } },
96 | ]
97 | },
98 | },
99 |
100 |
101 | MINE: {
102 | desc: "个人中心",
103 | name: "个人中心",
104 | pageid: Env.PageEnum.MINE,
105 | mark: { id: "titleText", text: "我" },
106 | next: [],
107 | operates: {
108 | next: [
109 | { name: "image", mark: { base64: wbqianbao_logo }, param:{action:"tap"} },
110 | ],
111 | finish: [{ name: "back" }],
112 | },
113 | },
114 |
115 | HOME_HOT: {
116 | desc: "首页热门",
117 | name: "首页热门",
118 | pageid: Env.PageEnum.HOME_HOT,
119 | mark: { id: "tv_groupName", text: "热门", desc: "", className: "" },
120 | next: [],
121 | operates: {
122 | next: [
123 | // { name: "click", mark: { id: "redpacket_container" } },
124 | { name: "click", mark: { desc: "我" } },
125 | ],
126 | finish: [{ name: "swipe" }],
127 | },
128 | },
129 |
130 | HOME_FOLLOW: {
131 | desc: "首页关注",
132 | name: "首页关注",
133 | pageid: Env.PageEnum.HOME_FOLLOW,
134 | mark: { id: "iv_groupStateIndicator", className: "android.widget.ImageView" },
135 | next: [],
136 | operates: {
137 | next: [
138 | { name: "click", mark: { desc: "我" } },
139 | ],
140 | finish: [{ name: "back" }],
141 | },
142 | },
143 |
144 | SIGEN: {
145 | desc: "微博钱包",
146 | name: "微博钱包",
147 | pageid: Env.PageEnum.SIGEN,
148 | mark: { name: "image", mark: { base64: weiboqianbao_hong }},
149 | next: [],
150 | operates: {
151 | next: [
152 | { name: "image", mark: { base64: zhaoqidaka }, param:{action:"tap"} },
153 | { name: "sleep" },
154 | { name: "click", mark: { id: "sign_name" } },
155 | { name: "sleep" },
156 | ],
157 | },
158 | },
159 |
160 | HOME_MESSAGE: {
161 | desc: "打卡页面",
162 | name: "打卡页面",
163 | pageid: Env.PageEnum.HOME_MESSAGE,
164 | mark: { id: "listview_header_no_hider_ll_sign_in" },
165 | next: [],
166 | operates: {
167 | next: [
168 | { name: "click", mark: { id: "listview_header_no_hider_ll_sign_in" } },
169 | { name: "sleep" },
170 | ],
171 | finish: [{ name: "back" }],
172 | },
173 | },
174 | },
175 | };
176 |
177 | /**
178 | * 初始化后执行
179 | */
180 | function afterInit() {
181 | sleep(1000);
182 | }
183 |
184 | var __curJob = JSON.parse(JSON.stringify(Job));
185 | //运行
186 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/src/work/百度地图-签到.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | /**
24 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
25 | */
26 | var Job = {
27 | version: '10.17.4.928',
28 | CLIENT: '百度地图-签到',
29 | package: 'com.baidu.BaiduMap',
30 | activity: "com.baidu.baidumaps.MapsActivity",
31 | /**
32 | * @description 默认配置,自动加载
33 | */
34 | get default() {
35 | return {
36 | /**
37 | * @description steps定义当前任务需要完成工作的步骤
38 | */
39 | steps: [this.running],
40 | /**
41 | * @description 指定某一步骤的最大重复次数
42 | */
43 | maxTimes: [-1],
44 | /**
45 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
46 | */
47 | someone: [
48 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.UPDATED, jobs: this.pages.UPDATED.operates.next },
49 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next},
50 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next},
51 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next},
52 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit:true},
53 | ],
54 | }
55 | },
56 | /**
57 | * @description Running步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
58 | */
59 | get running() {
60 | return {
61 | step: Env.STEP.RUNNING,
62 | must: [
63 | { pageid: Env.PageEnum.UPDATED, jobs: this.pages.UPDATED.operates.next },
64 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
65 | { pageid: Env.PageEnum.MINE, jobs: this.pages.MINE.operates.next },
66 | { pageid: Env.PageEnum.SIGEN, jobs: this.pages.SIGEN.operates.next },
67 | { pageid: Env.PageEnum.HOME_MESSAGE, jobs: this.pages.HOME_MESSAGE.operates.next, exit:true },
68 | ],
69 | someone: [],
70 | }
71 | },
72 |
73 | /**
74 | * ... 还可以定义更多的步骤
75 | */
76 | /**
77 | * 定义页面的识别标志及具体的各操作
78 | */
79 | pages: {
80 | UPDATED: {
81 | desc: "关闭更新弹窗",
82 | name: "关闭更新弹窗",
83 | pageid: Env.PageEnum.UPDATED,
84 | mark: { id: "cancel_update" },
85 | next: [],
86 | operates: {
87 | next: [
88 | { name: "click", mark: { id: "cancel_update" } },
89 | ]
90 | },
91 | },
92 |
93 |
94 | MINE: {
95 | desc: "个人中心",
96 | name: "个人中心",
97 | pageid: Env.PageEnum.MINE,
98 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
99 | mark: { id: "user_info_user_head_icon" },
100 | next: [],
101 | operates: {
102 | next: [
103 | // { name: "click", mark: { id: "user_head_portrait_icon" } },
104 | // { name: "sleep"},
105 | { name: "click", mark: { id: "ll_lv_signin" } },
106 | { name: "sleep"},
107 | { name: "click", mark: { text: "不选择地点" } },
108 | { name: "sleep"},
109 | ],
110 | finish: [{ name: "back" }],
111 | },
112 | },
113 |
114 |
115 | HOME: {
116 | desc: "首页",
117 | name: "首页",
118 | pageid: Env.PageEnum.HOME,
119 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
120 | mark: { id: "user_head_portrait_icon" },
121 | next: [],
122 | operates: {
123 | next: [
124 | { name: "click", mark: { id: "user_head_portrait_icon" } },
125 | { name: "sleep"},
126 | ],
127 | finish: [{ name: "back" }],
128 | },
129 | },
130 |
131 | SIGEN: {
132 | desc: "我在这里",
133 | name: "我在这里",
134 | pageid: Env.PageEnum.SIGEN,
135 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
136 | mark: { id:"tv_title_text", text: "我在这里" },
137 | next: [],
138 | operates: {
139 | next: [
140 | { name: "click", mark: { text: "不选择地点" } },
141 | { name: "sleep"},
142 | { name: "click", mark: { id: "sign_name" } },
143 | { name: "sleep"},
144 | ],
145 | },
146 | },
147 |
148 | HOME_MESSAGE: {
149 | desc: "聊天页面",
150 | name: "聊天页面",
151 | pageid: Env.PageEnum.HOME_MESSAGE,
152 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
153 | mark: { id:"user_sys_question_btn"},
154 | next: [],
155 | operates: {
156 | next: [
157 | { name: "click", mark: { id: "iv_left_btn" } },
158 | { name: "sleep"},
159 | ],
160 | finish: [{ name: "back" }],
161 | },
162 | },
163 | },
164 | };
165 |
166 | /**
167 | * 初始化后执行
168 | */
169 | function afterInit() {
170 | sleep(1000);
171 | }
172 |
173 | var __curJob = JSON.parse(JSON.stringify(Job));
174 | //运行
175 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/src/work/网易邮箱-注册.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileOverview 入口文件
3 | * @description 本脚本在Auto.Js 4.0.1版本中,自动化控制Android微博版本号:9.6.3版测试通过!
4 | * 欢迎使用和提交bug反馈
5 | * 设备要求:
6 | * 1.需要root
7 | * 2.安卓5.0以上
8 | * 3.Auto.js软件版本4.0以上
9 | *
10 | * 使用方法:
11 | * 1.将脚本与./dist/main.js放于同一目录下
12 | * 2.直接启动脚本即可
13 | * 3.暂时不支持解锁手机
14 | *
15 | * @author Tuple
16 | * @version 0.1
17 | */
18 |
19 |
20 | var Work = require("../common/work");
21 | var Env = require('../env');
22 |
23 | /**
24 | * 注意:如果一个页面有多个特征码匹配,以最后一个为准
25 | */
26 | var Job = {
27 | CLIENT: 'mail.163.com',
28 | package: 'com.tencent.mtt',//qq浏览器
29 | activity: "com.tencent.mtt.MainActivity",
30 |
31 | /**
32 | * @description 默认配置,自动加载
33 | */
34 | get default() {
35 | return {
36 | /**
37 | * @description steps定义当前任务需要完成工作的步骤
38 | */
39 | steps: [this.running],
40 | /**
41 | * @description 指定某一步骤的最大重复次数
42 | */
43 | maxTimes: [-1],
44 | /**
45 | * @description 定义可能遇到的页面默认处理方式; next:为强制跳转,pageid:为页面ID,jobs:为具体的执行操作
46 | */
47 | someone: [
48 | { next: Env.STEP.NOCHANGE, pageid: Env.PageEnum.UNKNOW, jobs: this.pages.UNKNOW.operates.next },
49 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.LOGIN, jobs: this.pages.LOGIN.operates.register },
50 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.REGISTER, jobs: this.pages.REGISTER.operates.input },
51 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.ACCOUNT_CONFIRM, jobs: this.pages.ACCOUNT_CONFIRM.operates.input },
52 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.ACCOUNT_SEND_CONFIRM, jobs: this.pages.ACCOUNT_SEND_CONFIRM.operates.send },
53 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.REGISTER_OK, jobs: this.pages.REGISTER_OK.operates.send },
54 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SELECT_CLASS, jobs: this.pages.SELECT_CLASS.operates.next },
55 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
56 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_SEARCH, jobs: this.pages.HOME_SEARCH.operates.next },
57 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.SEARCH, jobs: this.pages.SEARCH.operates.next },
58 | { next: Env.STEP.RUNNING, pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.send, exit: true },
59 | ],
60 | }
61 | },
62 | /**
63 | * @description Login步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
64 | */
65 | get login() {
66 | return {
67 | step: Env.STEP.LOGIN,
68 | must: [
69 | { pageid: Env.PageEnum.HOME, jobs: this.pages.HOME.operates.next },
70 | { pageid: Env.PageEnum.HOME_SEARCH, jobs: this.pages.HOME_SEARCH.operates.next },
71 | { pageid: Env.PageEnum.SEARCH, jobs: this.pages.SEARCH.operates.next },
72 | ],
73 | someone: [
74 | ],
75 | }
76 |
77 | },
78 |
79 | /**
80 | * @description Login步骤,为登陆步骤:分为必须步骤(must)和可能步骤(someone)
81 | */
82 | get running() {
83 | return {
84 | step: Env.STEP.RUNNING,
85 | must: [
86 | { pageid: Env.PageEnum.REGISTER, jobs: this.pages.REGISTER.operates.input },
87 | { pageid: Env.PageEnum.ACCOUNT_SEND_CONFIRM, jobs: this.pages.ACCOUNT_SEND_CONFIRM.operates.send },
88 | { pageid: Env.PageEnum.HOME_HOT, jobs: this.pages.HOME_HOT.operates.send, exit: true },
89 | ],
90 | someone: [
91 | ],
92 | }
93 |
94 | },
95 |
96 | /**
97 | * ... 还可以定义更多的步骤
98 | */
99 | /**
100 | * 定义页面的识别标志及具体的各操作
101 | */
102 | pages: {
103 | UNKNOW: {
104 | desc: "未知页面",
105 | name: "未知页面",
106 | pageid: Env.PageEnum.UNKNOW,
107 | mark: { name: "unknow" },
108 | priority:0,
109 | next: [],
110 | operates: {
111 | next: [
112 | { name: "click", mark: { className: "android.widget.TextView", text: "立即体验" } },
113 | { name: "click", mark: { text: "先进入网页版邮箱>" } },
114 | { name: "click", mark: { text: "以后再说" } },
115 | ]
116 | },
117 | },
118 | HOME: {
119 | desc: "浏览器首页",
120 | name: "浏览器首页",
121 | priority:0,
122 | pageid: Env.PageEnum.HOME,
123 | mark: { className: "com.tencent.mtt.browser.homepage.view.fastlink.g", text: "直播交友" },
124 | next: [],
125 | operates: {
126 | next: [
127 | { name: "click", mark: { className: "android.widget.TextView", text: "搜免费小说 影视 游戏 App" } },
128 | ],
129 | finish: [{ name: "sleep" }],
130 | },
131 | },
132 | HOME_SEARCH: {
133 | desc: "首页搜索",
134 | name: "首页搜索",
135 | priority:1,
136 | pageid: Env.PageEnum.HOME_SEARCH,
137 | mark: { desc: "智能语音" },
138 | next: [],
139 | operates: {
140 | next: [
141 | { name: "input", mark: { className: "android.widget.TextView", text: "取消" }, param: { get: { default: "mail.163.com" }, parent: 1, indexOf: { tag: "className", default: "android.view.View" } } },
142 | { name: "sleep" },
143 | { name: "tap", mark: { className: "android.widget.TextView", text: "进入" } },
144 | ],
145 | finish: [{ name: "sleep" }],
146 | },
147 | },
148 | SEARCH: {
149 | desc: "搜索页",
150 | name: "搜索页",
151 | priority:2,
152 | pageid: Env.PageEnum.SEARCH,
153 | mark: { className: "android.widget.TextView", text: "进入" },
154 | next: [],
155 | operates: {
156 | next: [
157 | { name: "click", mark: { className: "android.widget.TextView", text: "进入" } },
158 | ],
159 | finish: [{ name: "sleep" }],
160 | },
161 | },
162 | SELECT_CLASS: {
163 | desc: "先进入网页版邮箱",
164 | name: "先进入网页版邮箱",
165 | priority:0,
166 | pageid: Env.PageEnum.SELECT_CLASS,
167 | mark: { className: "android.view.View", text: "先进入网页版邮箱>" },
168 | next: [],
169 | operates: {
170 | next: [
171 | { name: "click", mark: { className: "android.view.View", text: "先进入网页版邮箱>" } },
172 | ]
173 | },
174 | },
175 | LOGIN: {
176 | desc: "登陆页输入手机号",
177 | name: "登录",
178 | /**
179 | * mark: 页面的标志控件,当页面找到匹配mark属性的控件时,我们认为它就位于这个页面
180 | * mark可能的属性:id,text,desc,className,textStartsWith,textEndsWith,
181 | * descStartsWith,descEndsWith 具体可以参考Autojs控件uiselector的函数
182 | */
183 | mark: { className: "android.view.View", text: "登 录" },
184 | priority:0,
185 | pageid: Env.PageEnum.LOGIN,
186 | next: [],
187 | operates: {
188 | login: [
189 | { name: "get", mark: { name: "login_phone", uri: "api" }, param: { set: { name: "phone" } } },
190 | { name: "set_text", mark: { className: "android.widget.EditText", text: "用户名" }, param: { get: { name: "phone" } } },
191 | { name: "set_text", mark: { className: "android.widget.EditText", text: "密码" }, param: { get: { name: "password" } } },
192 | { name: "click", mark: { id: "dologin", text: "登 录" } },
193 | ],
194 | register: [
195 | { name: "click", mark: { className: "android.view.View", text: "去注册" } },
196 | ]
197 | },
198 | },
199 | REGISTER: {
200 | desc: "注册页",
201 | name: "注册页",
202 | priority:0,
203 | pageid: Env.PageEnum.REGISTER,
204 | mark: { className: "android.view.View", text: "用户注册即代表同意" },
205 | next: [],
206 | operates: {
207 | input: [
208 | { name: "get", mark: { name: "register_name", uri: "api" }, param: { set: { name: "name" } } },
209 | { name: "set_text", mark: { className: "android.widget.EditText", text: "6-18位字母数字组合" }, param: { get: { name: "name" } } },
210 | { name: "wait", mark: { className: "android.view.View", text: "6-16位字母数字字符组合密码" } },
211 | { name: "get", mark: { name: "register_password", uri: "api" }, param: { set: { name: "password" } } },
212 | { name: "set_text", mark: { className: "android.widget.EditText", text: "6-16位字母数字字符组合密码" }, param: { get: { name: "password" } } },
213 | { name: "click", mark: { className: "android.widget.CheckBox" } },
214 | { name: "tap", mark: { className: "android.view.View", text: "点此进行验证" } },
215 | { name: "wait", mark: { className: "android.view.View", text: "验证成功" } },
216 | { name: "click", mark: { className: "android.view.View", text: "下一步" } },
217 | ],
218 | finish: [{ name: "sleep" }],
219 | },
220 | },
221 | ACCOUNT_CONFIRM: {
222 | desc: "验证手机号",
223 | name: "验证手机号",
224 | priority:0,
225 | pageid: Env.PageEnum.ACCOUNT_CONFIRM,
226 | mark: { className: "android.view.View", text: "注 册" },
227 | next: [],
228 | operates: {
229 | input: [
230 | { name: "get", mark: { name: "register_phone", uri: "api" }, param: { set: { name: "phone" } } },
231 | { name: "set_text", mark: { className: "android.widget.EditText", text: "输入验证手机号" }, param: { get: { name: "phone" } } },
232 | { name: "click", mark: { className: "android.view.View", text: "获取验证码" } },
233 | // { name: "get", mark: { name: "register_code", uri: "api" }, param: { set: { name: "register_code" } } },
234 | // { name: "set_text", mark: { className:"android.widget.EditText", text:"输入短信验证码" }, param: { get: { name: "register_code" } } },
235 | // { name: "click", mark: { className:"android.view.View", text: "注 册" } },
236 | ],
237 | finish: [{ name: "sleep" }],
238 | },
239 | },
240 | ACCOUNT_SEND_CONFIRM: {
241 | desc: "前往发送短信确认",
242 | name: "前往发送短信",
243 | priority:0,
244 | pageid: Env.PageEnum.ACCOUNT_SEND_CONFIRM,
245 | // mark: { className:"android.view.View", text: "编辑短信:注册验证" },
246 | mark: { className: "android.view.View", text: "前往发送短信" },
247 | next: [],
248 | operates: {
249 | send: [
250 | { name: "get", mark: { name: "register_send_code", uri: "api" }, param: {} },
251 | { name: "sleep", param: { delay: 12000 } },
252 | { name: "click", mark: { className: "android.view.View", text: "我已发送短信,注册" }, param:{loops:5,delay:5000} },
253 | // { name: "sleep", param:{delay:10000}},
254 | // { name: "click", mark: { className:"android.view.View", text: "我已发送短信,注册" } },
255 | // // 系统未收到短信,请重新发送短信验证
256 | ],
257 | finish: [{ name: "sleep" }],
258 | },
259 | },
260 | REGISTER_OK: {
261 | desc: "恭喜您,注册成功",
262 | name: "注册成功",
263 | priority:0,
264 | pageid: Env.PageEnum.REGISTER_OK,
265 | mark: { className: "android.view.View", text: "恭喜您," },
266 | next: [],
267 | operates: {
268 | send: [
269 | ],
270 | finish: [{ name: "sleep" }],
271 | },
272 | },
273 | HOME_HOT: {
274 | desc: "邮箱首页",
275 | name: "邮箱首页",
276 | priority:0,
277 | pageid: Env.PageEnum.HOME_HOT,
278 | mark: { className: "android.view.View", text: "收件箱" },
279 | next: [],
280 | operates: {
281 | send: [
282 | { name: "get", mark: { name: "register_ok", uri: "api" }},
283 | ],
284 | finish: [{ name: "sleep" }],
285 | },
286 | },
287 |
288 |
289 | },
290 | };
291 | /**
292 | * 初始化并获取配置
293 | */
294 | function afterInit() {
295 | sleep(1000);
296 | }
297 |
298 | var __curJob = JSON.parse(JSON.stringify(Job));
299 | //运行
300 | Work.main(__curJob, afterInit);
--------------------------------------------------------------------------------
/tools/image2base64:
--------------------------------------------------------------------------------
1 | python image2base64.py
--------------------------------------------------------------------------------
/tools/image2base64.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import base64
4 | import os
5 |
6 | imgBase64 = '../resources/template/base64.txt'
7 | file_dir = '../resources/template/'
8 |
9 | os.remove(imgBase64)
10 |
11 | print(file_dir, imgBase64)
12 | for root, dirs, files in os.walk(file_dir):
13 | for file in files:
14 | if os.path.splitext(file)[1] == '.png':
15 | print(file)
16 | img = os.path.join(root,file)
17 | with open(img,"rb") as f:
18 | # b64encode是编码,b64decode是解码
19 | base64_data = base64.b64encode(f.read())
20 | # # base64.b64decode(base64data)
21 | # print(base64_data)
22 | #print('create base64 ok :', os.path.splitext(img)[0])
23 | f = open(imgBase64,'a+')
24 | f.writelines(os.path.splitext(img))
25 | f.writelines("\r\n")
26 | # f.writelines('data:image/png;base64,'+base64_data)
27 | f.writelines(base64_data)
28 | f.writelines("\r\n\r\n\r\n\r\n")
29 | f.close()
30 | print('create base64 ok')
31 |
32 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | // webpack.config.js
2 |
3 | const path = require('path');
4 | const glob = require('glob');
5 |
6 | var addUI = require('./addUI');
7 |
8 | // let entry = getEntry('./src/work/**.js');
9 |
10 | function getEntry(globPath, options) {
11 | options = options || {};
12 | var entries = {},
13 | basename, tmp, pathname;
14 |
15 | glob.sync(globPath, options).forEach(function (entry) {
16 | pathname = entry.replace(/\.js$/,'').replace(/^\.\/src\/work\//,'');
17 | let fpath = entry;
18 | if(options.cwd){
19 | fpath = path.join(options.cwd, entry);
20 | }
21 | entries[pathname] = [fpath];
22 | });
23 | return entries;
24 | }
25 |
26 | var config = {
27 | // entry: getEntry('./src/work/*.js'),
28 | entry: getEntry('./src/work/微博-删除重复微博.js'),
29 | output: {
30 | // filename: 'main.js',
31 | //注意:使用[name]确保每个文件名都不重复
32 | filename: '[name].js',
33 | // filename: '[name]-[hash].js',
34 | path: path.resolve(__dirname, 'dist')
35 | },
36 | plugins: [
37 | new addUI({ options: true })
38 | ]
39 | };
40 |
41 |
42 |
43 | module.exports = (env, argv) => {
44 |
45 | if (argv.mode === 'development') {
46 | config.devtool = 'source-map';
47 | }
48 |
49 | if (argv.mode === 'production') {
50 | //...
51 | }
52 |
53 | return config;
54 | };
--------------------------------------------------------------------------------
/webpack.development.config.js:
--------------------------------------------------------------------------------
1 | // webpack.development.config.js
2 |
3 | const path = require('path');
4 |
5 | module.exports = {
6 | mode: 'development',
7 | entry: './src/index.js',
8 | output: {
9 | filename: 'main.js',
10 | path: path.resolve(__dirname, 'dist')
11 | }
12 | };
13 |
--------------------------------------------------------------------------------
/webpack.production.config.js:
--------------------------------------------------------------------------------
1 | // webpack.production.config.js
2 |
3 | const path = require('path');
4 |
5 | module.exports = {
6 | mode: 'production',
7 | entry: './src/index.js',
8 | output: {
9 | filename: 'main.js',
10 | path: path.resolve(__dirname, 'dist')
11 | }
12 | };
13 |
--------------------------------------------------------------------------------