├── config.txt
├── list.db
├── tiku.db
├── 更新题库.jpg
├── 更新主程序.jpg
├── res
└── logo.png
├── list.db-journal
├── tiku.db-journal
├── upmain.js
├── help.md
├── project.json
├── updated.js
├── README.md
├── tikuCommon.js
├── update.js
└── main.js
/config.txt:
--------------------------------------------------------------------------------
1 | 12 30 1 7 60 1 2
--------------------------------------------------------------------------------
/list.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/list.db
--------------------------------------------------------------------------------
/tiku.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/tiku.db
--------------------------------------------------------------------------------
/更新题库.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/更新题库.jpg
--------------------------------------------------------------------------------
/更新主程序.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/更新主程序.jpg
--------------------------------------------------------------------------------
/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/res/logo.png
--------------------------------------------------------------------------------
/list.db-journal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/list.db-journal
--------------------------------------------------------------------------------
/tiku.db-journal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LailuoA77/ly-auto-xuexiqiangguo/HEAD/tiku.db-journal
--------------------------------------------------------------------------------
/upmain.js:
--------------------------------------------------------------------------------
1 | let url = "https://www.lynuo.cn:449/main.js";
2 | let res = http.get(url);
3 | if(res.statusCode = 200){
4 | files.writeBytes(files.path("main.js"), res.body.bytes());
5 | toastLog("更新成功");
6 | }
7 | exit();
--------------------------------------------------------------------------------
/help.md:
--------------------------------------------------------------------------------
1 | 〇程序需要 悬浮窗 和 无障碍权限(设置→辅助功能→无障碍→本 APP)
2 | 〇程序工作原理为模拟点击,基于Auto.js框架+JavaScript脚本执行
3 | 〇程序不支持每周答题,专项答题,订阅。正常执行完毕42分(可执行前手动答题,答题完毕学习强国请返回主界面;也可执行中手动辅助答题,以手动点击为准)
4 | 〇积分判断执行:读取今日积分确定需执行任务,任务精准,但部分手机可能不支持(积分获取正常推荐使用)
5 | 〇循序依次执行:预置每日积分所需执行任务数,不判断积分,依次执行所有任务(积分获取返回null或报错使用)
6 | ◎请确保进入学习强国时位于 主界面,模拟点击从主界面开始
7 | ◎因存在文章误点击视频,多次重复点击同一文章视频问题,有概率造成循环执行,请手动补学
8 | ◎安卓版本低于安卓7,无法执行收藏评论转发,文章界面模拟滑动"
9 |
--------------------------------------------------------------------------------
/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_id": "C38FDD86-179",
5 | "build_number": 179,
6 | "build_time": 1620219370773,
7 | "release": false
8 | },
9 | "encryptLevel": 0,
10 | "useFeatures": [],
11 | "icon": "res/logo.png",
12 | "launchConfig": {
13 | "displaySplash": true,
14 | "hideLogs": false,
15 | "splashText": "Powered by Auto.js Pro",
16 | "stableMode": false
17 | },
18 | "main": "main.js",
19 | "name": "影自强国",
20 | "optimization": {
21 | "removeOpenCv": false,
22 | "unusedResources": false
23 | },
24 | "packageName": "lynuo.auto.xxqg",
25 | "scripts": {},
26 | "versionCode": 2,
27 | "versionName": "ds01"
28 | }
--------------------------------------------------------------------------------
/updated.js:
--------------------------------------------------------------------------------
1 | console.show();
2 | log("检查更新...");
3 | var r = http.get("https://www.lynuo.cn:449/xxqg-ds.html");
4 | if(r.statusCode != 200){
5 | log("更新失败"); exit();
6 | }
7 | else{
8 | var update = r.body.string();
9 | if (update != "ds01") {
10 | alert("检测到有更新 "+update, "检测到新版本,请前往\n https://www.lynuo.cn:449 \n 下载新版本!\n");
11 | }
12 | else{
13 | log("已是最新版本");
14 | }
15 | }
16 | //--------------检查更新软件:来源为萘落小站--------------//
17 |
18 |
19 | /**
20 | */
21 | function updateTikunet() {
22 | console.show();
23 | var dbName = "tiku.db"; //文件路径
24 | var path = files.path(dbName); //确保文件存在
25 | var url = "https://www.lynuo.cn:449/tiku.db";
26 | var res = http.get(url);
27 |
28 | log(path);
29 | if(res.statusCode != 200){
30 | toast("请求失败");exit();
31 | }
32 | files.writeBytes(path, res.body.bytes());
33 | toast("更新成功");
34 | console.hide();
35 | }
36 | //updateTikunet();
37 | exports = updateTikunet();
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 免责声明:
2 |
3 | 本程序只供个人学习Auto.js使用,不得盈利传播,不得用于违法用途,否则造成的一切后果自负!
4 |
5 | ## 重要、重要、十分重要:
6 | 如果继续使用此应用即代表您同意此协议
7 |
8 | ## 说明:
9 | 1、此应用仅适用于Android7.0以上的版本。
10 |
11 | 2、打开应用后请先点击第一个按钮打开无障碍和悬浮窗权限,如果没有反应则是已经开启。
12 |
13 | 3、随后点击默认执行按钮,程序会自动检测当前分数智能执行
14 |
15 | 4、如果您要使用自定义执行及单个任务执行功能,请先在数据配置页配置数据
16 |
17 | 5、由于题库的题目收录问题,一些答题项目无法做到全部正确,敬请谅解🙂🙂🙂🙂
18 |
19 | 6、更新方法
20 |
21 | ### 
22 | ### 
23 |
24 |
25 | ## 关于
26 | 本软件基于autojs v7.0框架制作,感谢以下兄弟提供代码,并且是基于他们代码加以修改
27 |
28 | ## 特别鸣谢:
29 | 晴天、翻滚的茄子、AIQiangguo、徐子越、xyz
30 | ## 基于
31 | https://github.com/zhuxuedefeng
32 | https://github.com/Gingmzmzx
33 |
34 | 正常执行可得50+分,具体看情况
35 | 请确保进入学习强国时位于主界面,模拟点击从主界面开始"
36 |
--------------------------------------------------------------------------------
/tikuCommon.js:
--------------------------------------------------------------------------------
1 | importClass(android.database.sqlite.SQLiteDatabase);
2 |
3 | function searchTiku(keyw) {
4 | //表名
5 | var tableName = "tiku";
6 | var ansArray = searchDb(keyw, tableName, "");
7 | return ansArray;
8 | }
9 |
10 | function searchDb(keyw, _tableName, queryStr) {
11 | var tableName = _tableName; //数据文件名
12 | var dbName = "tiku.db"; //文件路径
13 | var path = files.path(dbName); //确保文件存在
14 | if (!files.exists(path)) {
15 | files.createWithDirs(path);
16 | }
17 |
18 | //创建或打开数据库
19 | var db = SQLiteDatabase.openOrCreateDatabase(path, null);
20 | var query = "";
21 | if (queryStr == "") {
22 | query = "SELECT question,answer FROM " + tableName + " WHERE question LIKE '" + keyw + "%'";//前缀匹配
23 | } else {
24 | query = queryStr;
25 | }
26 |
27 | log(query);
28 | //query="select * from tiku"
29 | //db.execSQL(query);
30 |
31 | var cursor = db.rawQuery(query, null);
32 | cursor.moveToFirst();
33 | var ansTiku = [];
34 | if (cursor.getCount() > 0) {
35 | do {
36 | var timuObj={"question" : cursor.getString(0),"answer":cursor.getString(1)};
37 | ansTiku.push(timuObj);
38 | } while (cursor.moveToNext());
39 | } else {
40 | log("题库中未找到: " + keyw);
41 | }
42 | cursor.close();
43 | return ansTiku;
44 |
45 | }
46 |
47 | function executeSQL(sqlstr) { //数据文件名
48 | var dbName = "tiku.db"; //文件路径
49 | var path = files.path(dbName); //确保文件存在
50 | if (!files.exists(path)) {
51 | files.createWithDirs(path);
52 | }
53 | //创建或打开数据库
54 | var db = SQLiteDatabase.openOrCreateDatabase(path, null);
55 | db.execSQL(sqlstr);
56 | toastLog(sqlstr);
57 | db.close();
58 | }
59 |
60 |
61 | function indexFromChar(str) {
62 | return str.charCodeAt(0) - "A".charCodeAt(0);
63 | }
64 |
65 | function searchNet(keyw) {
66 | var tableName = "tikuNet";
67 | var ansArray = searchDb(keyw, tableName, "");
68 | return ansArray;
69 | }
70 |
71 | exports.searchTiku = searchTiku;
72 | exports.searchNet = searchNet;
73 | exports.searchDb = searchDb;
74 | exports.indexFromChar = indexFromChar;
75 | exports.executeSQL = executeSQL;
76 |
--------------------------------------------------------------------------------
/update.js:
--------------------------------------------------------------------------------
1 | console.show();
2 | log("检查更新...");
3 | var r = http.get("https://www.lynuo.cn:449/xxqg-ds.html");
4 | if(r.statusCode != 200){
5 | log("更新失败");
6 | }
7 | else{
8 | var update = r.body.string();
9 | if (update != "ds01") {
10 | alert("检测到有更新 "+update, "检测到新版本,请前往\n https://www.lynuo.cn:449 \n 下载新版本!\n");
11 | }
12 | else{
13 | log("已是最新版本");
14 | }
15 | }
16 | //--------------检查更新软件:来源为萘落小站--------------//
17 |
18 | //---题库更新---//
19 | importClass(android.database.sqlite.SQLiteDatabase);
20 | /**
21 | * @description: 更新数据库tikuNet表
22 | * @param {} liArray li列表,包含题目和答案
23 | */
24 |
25 | function CreateAndInsert(liArray){
26 | var dbName = "tiku.db"; //文件路径
27 | var path = files.path(dbName); //确保文件存在
28 | //创建或打开数据库
29 | var db = SQLiteDatabase.openOrCreateDatabase(path, null);
30 | var createTable = "\
31 | CREATE TABLE IF NOT EXISTS tikuNet(\
32 | question CHAR(253),\
33 | answer CHAR(100)\
34 | );";
35 | var cleanTable = "DELETE FROM tikuNet";
36 | db.execSQL(createTable);
37 | db.execSQL(cleanTable);
38 | log("创建打开清空表tikuNet!");
39 |
40 | var sql = "INSERT INTO tikuNet (question, answer) VALUES (?, ?)";
41 | db.beginTransaction();
42 | var stmt = db.compileStatement(sql);
43 | for (var li = 0, len = liArray.length; li < len; li++) {
44 | //log("题目:"+li.text());
45 | var tiMu = liArray[li].content;
46 | var daAn = liArray[li].answer;
47 | log(util.format("题目:%s\n答案:%s"),tiMu,daAn);
48 | stmt.bindString(1, tiMu);
49 | stmt.bindString(2, daAn);
50 | stmt.executeInsert();
51 | stmt.clearBindings();
52 | }
53 | db.setTransactionSuccessful();
54 | db.endTransaction();
55 | db.close();
56 | return true;
57 | }
58 |
59 |
60 | /**
61 | */
62 | function updateTikunet() {
63 | log("检测题库是否存在")
64 | var dbName = "tiku.db"; //文件路径
65 | var path = files.path(dbName); //确保文件存在
66 | if (!files.exists(path)) {
67 | alert("题库文件不存在,将创建题库");
68 | files.createWithDirs(path);
69 | files.write("./if.txt", "0");
70 | }
71 | log("开始更新题库,请先不要进行操作!!!");
72 | log("开始下载题库json数据...");
73 | var htmlArray = http.get("https://www.lynuo.cn:449/questions.json");
74 | var liArray = htmlArray.body.json();
75 | log(util.format("题库下载完毕,题目总数:%s"), liArray.length);
76 | var iff = files.read("./if.txt");
77 | if (iff != liArray.length){
78 | files.write("./if.txt", liArray.length);
79 | //执行更新
80 | log("开始更新数据库...");
81 | if (CreateAndInsert(liArray)) {
82 | log("数据库更新完毕!");
83 | sleep(3000);
84 | console.hide();
85 | return liArray.length;
86 | } else {
87 | log("更新失败");
88 | sleep(3000);
89 | return -1;
90 | }
91 | }else{
92 | log("题目数量相同,无需更新");
93 | sleep(3000);
94 | console.hide();
95 | return 0;
96 | }
97 | }
98 | //updateTikunet();
99 | exports = updateTikunet();
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | importClass(android.view.View); //db操作
4 | importClass(android.database.sqlite.SQLiteDatabase); //检查题库
5 |
6 | var tikuCommon = require("./tikuCommon.js");
7 |
8 | var dw = device.width;
9 | var dh = device.height;
10 | var margin = parseInt(dw * 0.02);
11 |
12 | //开屏提示 萘落修改
13 | //var readme = files.read("./README.md");
14 | //if (!files.exists(files.path("list.db-journal"))) {
15 | // alert("必读说明", readme);
16 | //}
17 | //启动后自动更新
18 | //var r = http.get("https://www.lynuo.cn:449/xxqg-ds.html");
19 | //if(r.statusCode = 200) {
20 | // var update = r.body.string();
21 | // if (update != "ds01") engines.execScriptFile("upmain.js");
22 | //}
23 |
24 | //载入配置 萘落修改于2021-6-15;
25 | var confi = files.read("./config.txt");
26 | var conf = confi.split(" ");
27 |
28 | lCount+" "+qCount+" "+zCount;
29 | var aCount = conf[0];//文章默认学习篇数
30 | var vCount = conf[3];//小视频默认学习个数
31 | var cCount = 2;//收藏+分享+评论次数
32 |
33 | var aTime = conf[1];//每篇文章学习-30秒 30*12≈360秒=6分钟
34 | var vTime = conf[4];//每个小视频学习60秒
35 | var rTime = 360;//音视频时长-6分钟
36 |
37 | // var dyNum = 2;//订阅 2
38 | var commentText = ["支持党,支持国家!", "为实现中华民族伟大复兴而不懈奋斗!", "不忘初心,牢记使命", "为实现中华民族伟大复兴而不懈奋斗!"];//评论内容,可自行修改,大于5个字便计分
39 | var num = random(0, commentText.length - 1) ;//随机数
40 |
41 | var aCat = ["推荐","要闻","综合","新思想"];
42 | var aCatlog = aCat[num] ;//文章学习类别,随机取"推荐""要闻"、"新思想"
43 | var aZX = conf[2];//文章执行1或2脚本
44 | var date_string = getTodayDateString();//获取当天日期字符串
45 | var vCat = ["第一频道", "学习视频", "联播频道"];
46 | var vCatlog = vCat[num] ;//视频学习类别,随机取 "第一频道"、"学习视频"、"联播频道"
47 | if (num == 0){
48 | var s = "央视网";
49 | }else if (num == 1){
50 | var s = "央视新闻";
51 | }else {
52 | var s = "中央广播电视总台";
53 | }
54 | var lCount = conf[5];//挑战答题轮数
55 | var qCount = random(9, 12);//挑战答题每轮答题数(5~7随机)
56 | var zCount = conf[6];//四人赛轮数
57 | var zsyzd =1;//争上游和双人对战是否自动做,1,2 默认自动1
58 | var color = "#006688"; //不要删除,否则无法运行
59 | var oldaquestion;//争上游和对战答题循环,定义旧题目对比新题目用20201022
60 | var zxzd =1;//每周和专项是否自动做,1,2 默认自动1
61 | var myScores = {};//分数
62 | //特殊题,特点:题目一样,答案不同
63 | var ZiXingTi = "选择词语的正确词形。";//字形题
64 | var DuYinTi = "选择正确的读音。";//读音题 20201211
65 | var ErShiSiShi ="下列不属于二十四史的是。";//二十四史
66 | var customize_flag = false;//自定义运行标志
67 | //初始化题库,数据库
68 | var db = SQLiteDatabase.openOrCreateDatabase(files.path("tiku.db"),null);
69 | // // db.beginTransaction();//数据库开始事务s
70 | // var sql = "SELECT * FROM tikuNet;";
71 | // var cursor = db.rawQuery(sql, null);
72 | // if (cursor.moveToFirst()) {
73 | // var answer = cursor.getString(0);
74 | // cursor.close();
75 | // toastLog("题库初始化完成");
76 | // }
77 | // db.endTransaction();//数据结束事务
78 | /*
79 | <---------------UI部分开始--------------->
80 | lynuo更新
81 | */
82 | ui.layout(
83 |
84 |
85 |
86 |
87 |
88 |
89 |
207 |
208 |
209 |
210 |
216 |
217 |
218 |
219 |
220 | );
221 | activity.setSupportActionBar(ui.toolbar);
222 | //设置滑动页面的标题
223 | ui.viewpager.setTitles(["自动", "数据配置", "题库"]);
224 | //让滑动页面和标签栏联动
225 | ui.tabs.setupWithViewPager(ui.viewpager);
226 | ui.run(() => {ui.pbar.setVisibility(View.INVISIBLE);}); //进度条不可见
227 | //让工具栏左上角可以打开侧拉菜单
228 | ui.toolbar.setupWithDrawer(ui.drawer);
229 |
230 | ui.menu.setDataSource([
231 | {
232 | title: "使用说明",
233 | icon: "@drawable/ic_help_black_48dp"
234 | },
235 | {
236 | title: "关于",
237 | icon: "@drawable/ic_android_black_48dp"
238 | },
239 | {
240 | title: "协议",
241 | icon: "@drawable/ic_favorite_black_48dp"
242 | },
243 | {
244 | title: "更新",
245 | icon: "@drawable/ic_settings_black_48dp"
246 | },
247 | {
248 | title: "退出",
249 | icon: "@drawable/ic_exit_to_app_black_48dp"
250 | }
251 | ]);
252 |
253 | ui.menu.on("item_click", item => {
254 | switch(item.title){
255 | case "退出":
256 |
257 | stop_app();
258 | break;
259 | case "协议":
260 | alert("协议", "免责声明:本程序只供个人学习Auto.js使用,不得盈利传播,不得用于违法用途,否则造成的一切后果自负!\n如果继续使用此应用即代表您同意此协议");
261 | break;
262 | case "关于":
263 | alert("必读说明", readme);break;
264 | case "使用说明":
265 | alert("使用说明",files.read("./help.md"));break;
266 | case "更新":
267 | {
268 | engines.execScriptFile("upmain.js");
269 | };break;
270 | }
271 | })
272 |
273 | // <---------------UI结束--------------->
274 | ui.click_me.on("click", ()=>{
275 | toast("选择'影自强国'开启无障碍");
276 | auto.waitFor();
277 | console.show();
278 | console.hide();
279 | });
280 | var thread = null;
281 | //查询
282 | ui.search.click(() => {
283 | //预先初始化
284 | qaArray = [];
285 | threads.shutDownAll();
286 | ui.run(() => {
287 | ui.question.setText("");
288 | ui.answer.setText("");
289 | ui.questionIndex.setText("0");
290 | ui.questionCount.setText("0");
291 | });
292 | //查询开始
293 | threads.start(function () {
294 | ui.run(() => {ui.pbar.setVisibility(View.VISIBLE);}); //进度条可见
295 | if (ui.keyword.getText() != "") {
296 | var keyw = ui.keyword.getText();
297 | if (ui.rbQuestion.checked) {//按题目搜
298 | var sqlStr = util.format("SELECT question,answer FROM tikuNet WHERE %s LIKE '%%%s%'", "question", keyw);
299 | }else {//按答案搜
300 | var sqlStr = util.format("SELECT question,answer FROM tikuNet WHERE %s LIKE '%%%s%'", "answer", keyw);
301 | }
302 | qaArray = tikuCommon.searchDb(keyw, "tikuNet", sqlStr);
303 | var qCount = qaArray.length;
304 | if (qCount > 0) {
305 | ui.run(() => {
306 | ui.question.setText(qaArray[0].question);
307 | ui.answer.setText(qaArray[0].answer);
308 | ui.questionIndex.setText("1");
309 | ui.questionCount.setText(String(qCount));
310 | });
311 | }else {
312 | toastLog("未找到");
313 | ui.run(() => {
314 | ui.question.setText("未找到");
315 | });
316 | }
317 | }else {
318 | toastLog("请输入关键字");
319 | }
320 | ui.run(() => {ui.pbar.setVisibility(View.INVISIBLE);}); //进度条不可见
321 | });
322 | });
323 |
324 | //最近十条
325 | ui.lastTen.click(() => {
326 | threads.start(function () {
327 | ui.run(() => {ui.pbar.setVisibility(View.VISIBLE);}); //进度条可见
328 | var keyw = ui.keyword.getText();
329 | qaArray = tikuCommon.searchDb(keyw, "", "SELECT question,answer FROM tikuNet ORDER BY rowid DESC limit 10");
330 | var qCount = qaArray.length;
331 | if (qCount > 0) {
332 | //toastLog(qCount);
333 | ui.run(() => {
334 | ui.question.setText(qaArray[0].question);
335 | ui.answer.setText(qaArray[0].answer);
336 | ui.questionIndex.setText("1");
337 | ui.questionCount.setText(qCount.toString());
338 | });
339 | }else {
340 | toastLog("未找到");
341 | ui.run(() => {
342 | ui.question.setText("未找到");
343 | });
344 | }
345 | ui.run(() => {ui.pbar.setVisibility(View.INVISIBLE);}); //进度条不可见
346 | });
347 | });
348 |
349 | //上一条
350 | ui.prev.click(() => {
351 | threads.start(function () {
352 | if (qaArray.length > 0) {
353 | var qIndex = parseInt(ui.questionIndex.getText()) - 1;
354 | if (qIndex > 0) {
355 | ui.run(() => {
356 | ui.question.setText(qaArray[qIndex - 1].question);
357 | ui.answer.setText(qaArray[qIndex - 1].answer);
358 | ui.questionIndex.setText(String(qIndex));
359 | });
360 | }else {
361 | toastLog("已经是第一条了!");
362 | }
363 | }else {
364 | toastLog("题目为空");
365 | }
366 | });
367 | });
368 |
369 | //下一条
370 | ui.next.click(() => {
371 | threads.start(function () {
372 | if (qaArray.length > 0) {
373 | //toastLog(qaArray);
374 | var qIndex = parseInt(ui.questionIndex.getText()) - 1;
375 | if (qIndex < qaArray.length - 1) {
376 | //toastLog(qIndex);
377 | //toastLog(qaArray[qIndex + 1].question);
378 | ui.run(() => {
379 | ui.question.setText(qaArray[qIndex + 1].question);
380 | ui.answer.setText(qaArray[qIndex + 1].answer);
381 | ui.questionIndex.setText(String(qIndex + 2));
382 | });
383 | }else {
384 | toastLog("已经是最后一条了!");
385 | }
386 | }else {
387 | toastLog("题目为空");
388 | }
389 | });
390 | });
391 |
392 | //修改
393 | ui.update.click(() => {
394 | threads.start(function () {
395 | if (ui.question.getText() && qaArray.length > 0 && parseInt(ui.questionIndex.getText()) > 0) {
396 | var qIndex = parseInt(ui.questionIndex.getText()) - 1;
397 | var questionOld = qaArray[qIndex].question;
398 | var questionStr = ui.question.getText();
399 | var answerStr = ui.answer.getText();
400 | var sqlstr = "UPDATE tikuNet SET question = '" + questionStr + "' , answer = '" + answerStr + "' WHERE question= '" + questionOld + "'";
401 | tikuCommon.executeSQL(sqlstr);
402 | }else {
403 | toastLog("请先查询");
404 | }
405 | });
406 | });
407 |
408 | //导出tiku.db
409 | ui.tikudaocu.click(() => {
410 | threads.start(function () {
411 | // db.endTransaction();//数据结束事务
412 | sleep(500);
413 | db.close();
414 | sleep(500);
415 | files.copy(files.path("tiku.db"), "/sdcard/Download/tiku.db");
416 | alert("题库文件'tiku.db'将会导出在到/sdcard/Download文件夹下!");
417 | sleep(500);
418 | db = SQLiteDatabase.openOrCreateDatabase(files.path("./tiku.db"),null);
419 | toastLog("导出成功!");
420 | });
421 | });
422 |
423 | //导入题库
424 | ui.tikudaoru.click(() => {
425 | threads.start(function () {
426 | if (!files.exists("/sdcard/Download/tiku.db")) {//确保文件存在
427 | alert("题库文件不存在", "请将文件名为'tiku.db'的题库文件置于'/sdcard/Download'文件夹里");
428 | return;
429 | }
430 | else{
431 | // db.endTransaction();//数据结束事务
432 | sleep(500);
433 | db.close();
434 | alert("即将导入题库");
435 | files.copy("/sdcard/Download/tiku.db",files.path("tiku.db"));
436 | sleep(500);
437 | db = SQLiteDatabase.openOrCreateDatabase(files.path("./tiku.db"),null);
438 | toastLog("导入成功");
439 | }
440 | });
441 | });
442 |
443 | //重置
444 | ui.reset.click(() => {
445 | threads.shutDownAll();
446 | threads.start(function () {
447 | qaArray = [];
448 | ui.run(() => {
449 | ui.keyword.setText("");
450 | ui.question.setText("");
451 | ui.answer.setText("");
452 | ui.questionIndex.setText("0");
453 | ui.questionCount.setText("0");
454 | ui.rbQuestion.setChecked(true);
455 | });
456 | files.remove("tiku.db-journal");
457 | toastLog("重置完毕!");
458 | });
459 | });
460 |
461 | //更新网络题库
462 | ui.updateTikuNet.click(() => {
463 | dialogs.build({
464 | title: "更新网络题库",
465 | content: "确定更新?",
466 | positive: "确定",
467 | negative: "取消",
468 | })
469 | .on("positive", update)
470 | .show();
471 |
472 | function update() {
473 | threads.start(function () {
474 | db.close();
475 | engines.execScriptFile("./updated.js");
476 | db = SQLiteDatabase.openOrCreateDatabase(files.path("./tiku.db"),null);
477 | });
478 | }
479 | });
480 |
481 | //清空阅读文章
482 | ui.listdel.click(() => {
483 | let dbt = SQLiteDatabase.openOrCreateDatabase(files.path("list.db"), null);
484 | let Deletelistable = "DELETE FROM learnedArticles";
485 | dbt.execSQL(Deletelistable);
486 | dbt.close();
487 | toastLog("已清空文章阅读记录!");
488 | })
489 |
490 | ui.daochu.click(() => {
491 | dialogs.build({
492 | title: "提示",
493 | content: "这个操作会备份已学文章的数据库到\n/sdcard/Download文件夹下",
494 | positive: "确定",
495 | }).show();
496 | files.copy(files.path("list.db"), "/sdcard/Download/list.db");
497 | toastLog("已将数据库复制到/sdcard/Download文件夹下");
498 | });
499 |
500 | ui.daoru.click(() => {//导入题目
501 | dialogs.build({
502 | title: "提示",
503 | content: "请确认文件已经放在\n/sdcard/Download文件夹下\n导入后会删除导出的文件!!\n如果需要请先备份!!",
504 | positive: "确定",
505 | negative: "取消",
506 | }).on("positive", copy)
507 | .show();
508 | function copy() {
509 | files.copy("/sdcard/Download/list.db", files.path("list.db"));
510 | toastLog("导入成功!");
511 | files.remove("/sdcard/Download/list.db")
512 | }
513 | });
514 |
515 | ui.save.click(function () {
516 | aCatlog = ui.aCatlog.getText();
517 | date_string = parseInt(ui.date_string.getText());
518 | vCatlog = ui.vCatlog.getText();
519 | s = ui.s.getText();
520 | aCount = parseInt(ui.aCount.getText());
521 | aTime = parseInt(ui.aTime.getText());
522 | aZX = parseInt(ui.aZX.getText());
523 | vCount = parseInt(ui.vCount.getText());
524 | vTime = parseInt(ui.vTime.getText());
525 | lCount = parseInt(ui.lCount.getText());
526 | qCount = parseInt(ui.qCount.getText());
527 | zCount = parseInt(ui.zCount.getText());
528 |
529 | var config = aCount+" "+aTime+" "+aZX+" "+vCount+" "+vTime+" "+lCount+" "+zCount;
530 | files.write("./config.txt", config);
531 | toast("保存成功");
532 | });
533 |
534 | /*----程序执行部分 2021-6-13 萘落修改了一下-----*/
535 | ui.all.click(function () {
536 | if (thread != null && thread.isAlive()) {
537 | alert("注意", "脚本正在运行,请结束之前进程");
538 | return;
539 | }
540 | toast("开始积分判断运行");
541 | thread = threads.start(function () {
542 | aCatlog = ui.aCatlog.getText();
543 | vCatlog = ui.vCatlog.getText();
544 | aZX = parseInt(ui.aZX.getText());
545 | lCount = parseInt(ui.lCount.getText());
546 | qCount = parseInt(ui.qCount.getText());
547 | zCount = parseInt(ui.zCount.getText());
548 | main();
549 | });
550 | });
551 |
552 | ui.customize.click(function () {
553 | if (thread != null && thread.isAlive()) {
554 | alert("注意", "脚本正在运行,请结束之前进程");
555 | return;
556 | }
557 | toast("开始自定义运行");
558 | thread = threads.start(function () {
559 | aCatlog = ui.aCatlog.getText();
560 | date_string = parseInt(ui.date_string.getText());
561 | vCatlog = ui.vCatlog.getText();
562 | s = ui.s.getText();
563 | aCount = parseInt(ui.aCount.getText());
564 | aTime = parseInt(ui.aTime.getText());
565 | aZX = parseInt(ui.aZX.getText());
566 | vCount = parseInt(ui.vCount.getText());
567 | vTime = parseInt(ui.vTime.getText());
568 | lCount = parseInt(ui.lCount.getText());
569 | qCount = parseInt(ui.qCount.getText());
570 | zCount = parseInt(ui.zCount.getText());
571 | customize_flag = true;
572 | console.log('文章频道:' + aCatlog.toString() + '日期:' + date_string)
573 | console.log('文章数量:' + aCount.toString() + '篇')
574 | console.log('视频频道:' + vCatlog.toString() + '关键词' + s)
575 | console.log('视频数量:' + vCount.toString() + '个')
576 | main();
577 | });
578 | });
579 |
580 | ui.cq.click(function () {//挑战答题
581 | auto.waitFor();//等待获取无障碍辅助权限
582 | if (thread != null && thread.isAlive()) {
583 | alert("注意", "脚本正在运行,请结束之前进程");
584 | return;
585 | }
586 | thread = threads.start(function () {
587 | lCount = parseInt(ui.lCount.getText());
588 | qCount = parseInt(ui.qCount.getText());
589 | start_app();
590 | challengeQuestion();
591 | stop_app();
592 | });
593 | });
594 |
595 | ui.zxx.click(function () {//隐藏技能,自动学习扩充题库哦,无限答题技能
596 | auto.waitFor();//等待获取无障碍辅助权限
597 | if (thread != null && thread.isAlive()) {
598 | alert("注意", "脚本正在运行,请结束之前进程");
599 | return;
600 | }
601 | thread = threads.start(function () {
602 | lCount = parseInt(ui.lCount.getText());
603 | qCount = parseInt(ui.qCount.getText());
604 | lCount = 10;
605 | qCount = 1000;
606 | start_app();
607 | challengeQuestion();
608 | stop_app();
609 | });
610 | });
611 |
612 | ui.dwz.click(function () {//读文章
613 | auto.waitFor();//等待获取无障碍辅助权限
614 | if (thread != null && thread.isAlive()) {
615 | alert("注意", "脚本正在运行,请结束之前进程");
616 | return;
617 | }
618 | thread = threads.start(function () {
619 | start_app();
620 | if (aZX == 1){
621 | articleStudy1();//学习文章脚本1,包含点赞、分享和评论
622 | }
623 | else{
624 | articleStudy2();//学习文章脚本2,包含点赞、分享和评论
625 | }
626 | stop_app();
627 | });
628 | });
629 |
630 | ui.ksp.click(function(){//看视频
631 | auto.waitFor();//等待获取无障碍辅助权限
632 | if (thread != null && thread.isAlive()) {
633 | alert("注意", "脚本正在运行,请结束之前进程");
634 | return;
635 | }
636 | thread = threads.start(function () {
637 | start_app();
638 | videoStudy_bailing();
639 | stop_app();
640 | });
641 | });
642 |
643 | ui.wq.click(function () {//每周答题 专项答题
644 | auto.waitFor();//等待获取无障碍辅助权限
645 | if (thread != null && thread.isAlive()) {
646 | alert("注意", "脚本正在运行,请结束之前进程");
647 | return;
648 | }
649 | thread = threads.start(function () {
650 | start_app();
651 | weeklyQuestion();
652 | specialQuestion();
653 | stop_app();
654 | });
655 | });
656 |
657 | ui.dq.click(function () {//每日答题
658 | auto.waitFor();//等待获取无障碍辅助权限
659 | if (thread != null && thread.isAlive()) {
660 | alert("注意", "脚本正在运行,请结束之前进程");
661 | return;
662 | }
663 | thread = threads.start(function () {
664 | start_app();
665 | dailyQuestion();
666 | stop_app();
667 | });
668 | });
669 |
670 | ui.sr.click(function () {//双人对战
671 | auto.waitFor();//等待获取无障碍辅助权限
672 | if (thread != null && thread.isAlive()) {
673 | alert("注意", "脚本正在运行,请结束之前进程");
674 | return;
675 | }
676 | thread = threads.start(function () {
677 | start_app();
678 | zCount = parseInt(ui.zCount.getText());
679 | SRQuestion();
680 | stop_app();
681 | });
682 | });
683 |
684 | ui.zsy.click(function () {//四人赛
685 | auto.waitFor();//等待获取无障碍辅助权限
686 | if (thread != null && thread.isAlive()) {
687 | alert("注意", "脚本正在运行,请结束之前进程");
688 | return;
689 | }
690 | thread = threads.start(function () {
691 | start_app();
692 | zCount = parseInt(ui.zCount.getText());
693 | zsyQuestion();
694 | stop_app();
695 | });
696 | });
697 |
698 | ui.stop.click(function () {
699 | if (thread != null && thread.isAlive()) {
700 | threads.shutDownAll();
701 | toast("停止运行!")
702 | console.hide();
703 | }
704 | else {
705 | toast("没有线程在运行!")
706 | }
707 | });
708 |
709 |
710 |
711 | ui.aCatlog.setText(aCatlog.toString());
712 | ui.date_string.setText(date_string.toString());
713 | ui.aCount.setText(aCount.toString());
714 | ui.aTime.setText(aTime.toString());
715 | ui.aZX.setText(aZX.toString());
716 | ui.vCatlog.setText(vCatlog.toString());
717 | ui.s.setText(s.toString());
718 | ui.vCount.setText(vCount.toString());
719 | ui.vTime.setText(vTime.toString());
720 | ui.lCount.setText(lCount.toString());
721 | ui.qCount.setText(qCount.toString());
722 | ui.zCount.setText(zCount.toString());
723 |
724 | /*
725 | <---------------UI部分结束--------------->
726 | <---------------视频学习部分-------------->
727 | /**
728 | * @description: 视频学习计时(弹窗)函数
729 | * @param: n-视频标号 seconds-学习秒数
730 | * @return: null
731 | */
732 | function video_timing_bailing(n, seconds) {
733 | var dw = device.width;
734 | var dh = device.height;
735 | for (var i = 0;i < seconds;i++) {
736 | while (!textContains("分享").exists())//如果离开了百灵小视频界面则一直等待
737 | {
738 | console.clear();
739 | console.error("当前已离开第" + (n + 1) + "个百灵小视频界面,请重新返回视频");
740 | sleep(2000);
741 | return false;
742 | }
743 | if(text("点击重试").exists()){
744 | swipe(dw/3*2,dh/6*5,dw/3*2,dh/6, 500);//往下翻(纵坐标从5/6处滑到1/6处)
745 | i--;
746 | }
747 | sleep(990);//延时函数,延时一秒左右,数字自行添加。
748 | console.clear();
749 | console.info("第" + (n + 1) + "个小视频已经观看" + (i + 1) + "秒,剩余" + (seconds - i - 1) + "秒!");
750 | }
751 | }
752 |
753 | /**
754 | * @description: 新闻联播小视频学习计时(弹窗)函数
755 | * @param: n-视频标号 seconds-学习秒数
756 | * @return: null
757 | */
758 | function video_timing_news(n, seconds) {
759 | seconds = parseInt(seconds) + parseInt(random(0, 10));
760 | for (var i = 0;i < seconds;i++) {
761 | sleep(1000);
762 | while (!text("播放").exists())//如果离开了联播小视频界面则一直等待
763 | {
764 | console.error("当前已离开第" + (n + 1) + "个新闻小视频界面,请重新返回视频");
765 | sleep(2000);
766 | }
767 | console.info("第" + (n + 1) + "个小视频已经观看" + (i + 1) + "秒,剩余" + (seconds - i - 1) + "秒!");
768 | }
769 | }
770 |
771 | /**
772 | * @description: 广播学习计时(弹窗)函数
773 | * @param: r_time-已经收听的时间 seconds-学习秒数
774 | * @return: null
775 | */
776 | function radio_timing(r_time, seconds) {
777 | for (var i = 0;i < seconds;i++) {
778 | sleep(1000);
779 | if (i % 5 == 0)//每5秒打印一次信息
780 | {
781 | console.info("广播已经收听" + (i + 1 + r_time) + "秒,剩余" + (seconds - i - 1) + "秒!");
782 | }
783 | if (i % 15 == 0)//每15秒弹一次窗防止息屏
784 | {
785 | toast("这是防息屏弹窗,可忽略-. -");
786 | }
787 | }
788 | }
789 |
790 | /** 检查文章数据库
791 | * @description: 检查是否浏览过文章,没有读过变成已读
792 | * @param: title
793 | * @return: res (true,false)
794 | */
795 | function checkAndArticle(title){
796 | rtitle = title.replace("'", "''");
797 | var tag = "已读";
798 | let dbt = SQLiteDatabase.openOrCreateDatabase(files.path("list.db"), null);//创建或打开数据库
799 | let createTable = "\
800 | CREATE TABLE IF NOt EXISTS learnedArticles(\
801 | title CHAR(500),\
802 | tag CHAR(100)\
803 | );";
804 | dbt.execSQL(createTable);
805 | let sql = "SELECT * FROM learnedArticles WHERE title = '" + rtitle + "' AND tag = '" + tag + "'";
806 | let cursor = dbt.rawQuery(sql, null);
807 | let res = cursor.moveToFirst();
808 | cursor.close();
809 | if(res == false || res == "false"){
810 | sql = "INSERT INTO learnedArticles VALUES ('" + rtitle + "','" + tag + "')";
811 | dbt.execSQL(sql);
812 | }
813 | dbt.close();
814 | log(res);
815 | return res;
816 | }
817 |
818 | /**
819 | * @description: 获取积分
820 | * @param: null
821 | * @return: null
822 | */
823 | function getScores() {
824 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
825 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
826 | sleep(2000);
827 | console.log("正在获取积分...");
828 | while (!text("积分明细").exists()) {//自主页点击右上角积分数字进入学习积分
829 | if (id("comm_head_xuexi_score").exists()) {
830 | id("comm_head_xuexi_score").findOnce().click();
831 | }else if (text("积分").exists()) {
832 | text("积分").findOnce().parent().child(1).click();
833 | }else if (id("comm_head_xuexi_mine").exists()){//自强国通页面进入我的主页点击学习积分
834 | id("comm_head_xuexi_mine").findOnce().click();
835 | if (id("my_display_name").exists()){//我的主页
836 | id("my_recycler_view").findOnce().child(0).click();
837 | }
838 | }
839 | sleep(3000);
840 | }
841 | let err = false;
842 | while (!err) {
843 | try {
844 | className("android.widget.ListView").findOnce().children().forEach(item => {
845 | let name = item.child(0).child(0).text();
846 | let str = item.child(2).text().split("/");
847 | let score = str[0].match(/[0-9][0-9]*/g);
848 | myScores[name] = score;
849 | });
850 | err = true;
851 | }catch (e) {
852 | console.log(e);
853 | }
854 | }
855 | console.log(myScores);
856 | aCount = 12 - myScores["我要选读文章"];
857 | if(aCount == 0) aCount = 2 - myScores['分享'] - myScores['发表观点'] ;
858 | vCount = 6 - myScores["视听学习"] + 6 - myScores["视听学习时长"];
859 | rTime = (6 - myScores["视听学习时长"]) * 60;
860 | console.log('剩余文章:' + aCount.toString() + '篇')
861 | console.log('剩余视频:' + vCount.toString() + '个')
862 | console.log('视听学习时长:' + rTime.toString() + '秒')
863 | sleep(1000);back();sleep(1000);
864 | }
865 |
866 | function getTodayDateString() {
867 | var date = new Date();
868 | var y = date.getFullYear();
869 | var m = date.getMonth();
870 | var d = date.getDate();
871 | var s = dateToString(y, m, d);//年,月,日
872 | return s
873 | }
874 |
875 | function dateToString(y, m, d) {
876 | var year = y.toString();
877 | if ((m + 1) < 10) {
878 | var month = "0" + (m + 1).toString();
879 | }else {
880 | var month = (m + 1).toString();
881 | }
882 | if (d < 10) {
883 | var day = "0" + d.toString();
884 | }else {
885 | var day = d.toString();
886 | }
887 | var s = year + "-" + month + "-" + day;//年-月-日
888 | return s;
889 | }
890 |
891 | /* 数据库控制函数结束 */
892 |
893 | /**
894 | * @description: 文章学习计时(弹窗)函数
895 | * @param: n-文章标号 seconds-学习秒数
896 | * @return: null
897 | */
898 | function article_timing(n, seconds) {
899 | var dw = device.width;
900 | var dh = device.height;
901 | seconds = parseInt(seconds);
902 | var randNum = random(0, 10);
903 | randNum = parseInt(randNum);//惨痛的教训:这里必须要转成int类型,否则就成了几百秒 xzy 2021-5-5更新
904 | seconds = seconds + randNum;
905 | for (var i = 0;i < seconds;i++) {
906 | while (!textContains("欢迎发表你的观点").exists())//如果离开了文章界面则一直等待
907 | {
908 | console.error("当前已离开第" + (n + 1) + "文章界面,请重新返回文章页面...");
909 | sleep(2000);
910 | }
911 | if (i % 5 == 0)//每5秒打印一次学习情况
912 | {
913 | console.info("第" + (n + 1) + "篇文章已经学习" + (i + 1) + "秒,剩余" + (seconds - i - 1) + "秒!");
914 | }
915 | sleep(1000);
916 | if (i % 10 == 0)//每10秒滑动一次,如果android版本<7.0请将此滑动代码删除
917 | {
918 | toast("这是防息屏toast,请忽视-。-");
919 | if (i <= seconds / 2) {
920 | swipe(dw/3*2, dh/6*5, dw/3*2, dh/6, 500);//向下滑动
921 | }
922 | else {
923 | swipe(dw/3*2, dh/6, dw/3*2, dh/6*5, 500);//向上滑动
924 | }
925 | }
926 | }
927 | }
928 |
929 |
930 | /**
931 | * @description: 听“电台”新闻广播函数 (视听学习+视听学习时长)---6+6=12分
932 | * @param: null
933 | * @return: null
934 | */
935 | function listenToRadio() {
936 | click("电台");
937 | sleep(1000);
938 | click("听广播");
939 | sleep(2000);
940 | while (!(textContains("正在收听").exists() || textContains("最近收听").exists() || textContains("推荐收听").exists())) {
941 | log("等待加载");
942 | sleep(1000);
943 | }
944 | if (click("最近收听") == 0) {
945 | if (click("推荐收听") == 0) {
946 | click("正在收听");
947 | }
948 | }
949 | sleep(2000);
950 | if (id("btn_back").findOne().click() == 0) {
951 | sleep(2000);
952 | back();//返回电台界面
953 | }
954 | sleep(2000);
955 | }
956 |
957 | /**
958 | * @description: 文章学习函数 (阅读文章+文章学习时长)---12分
959 | * @param: null
960 | * @return: null
961 | */
962 | //文章学习函数之1 点击基于日期s=date_String或 "学习强国"平台
963 | function articleStudy1() {
964 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
965 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
966 | sleep(2000);
967 | var aCatlog = aCat[num] ;//文章学习类别,随机取"推荐""要闻"、"新思想"
968 | var date_string = getTodayDateString();//获取当天日期字符串
969 | var s = date_string;
970 | var listView = className("ListView");//获取文章ListView控件用于翻页
971 | click(aCatlog);
972 | sleep(2000);
973 | var zt_flag = false;//判断进入专题界面标志
974 | var fail = 0;//点击失败次数
975 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
976 | for (var i = 0, t = 0;i < aCount;) {
977 | if (click(s, t) == true)//如果点击成功则进入文章页面,不成功意味着本页已经到底,要翻页
978 | {
979 | let n = 0;
980 | while (!textContains("欢迎发表你的观点").exists())//如果没有找到评论框则认为没有进入文章界面,一直等待
981 | {
982 | sleep(1000);
983 | console.warn("正在等待加载文章界面...");
984 | if (n > 3)//等待超过3秒则认为进入了专题界面,退出进下一篇文章
985 | {
986 | console.warn("没找到评论框!该界面非文章界面!");
987 | zt_flag = true;
988 | break;
989 | }
990 | n++;
991 | }
992 | if (textContains("央视网").exists() || textContains("广播").exists() || textContains("中央广播电视总台").exists() ||textContains("播放").exists() ||textContains("展开").exists() )//如果存在“央视网、中央广播电视总台、播放、展开”则认为进入了视频需退出。关键词测试
993 | {
994 | console.warn("进入视频界面,退出并进下一篇文章!");
995 | t++;
996 | back();
997 | /* while (!id("home_bottom_tab_button_work").exists());
998 | sleep(500);
999 | click("电台");
1000 | sleep(1000);
1001 | click("最近收听");
1002 | console.log("因广播被打断,重新收听广播...");
1003 | sleep(1000);
1004 | back();*/
1005 | while (!id("home_bottom_tab_button_work").exists());
1006 | id("home_bottom_tab_button_work").findOne().click();
1007 | sleep(1000);
1008 | num = random(0, commentText.length - 1) ;//重取随机数
1009 | aCatlog = aCat[num] ;
1010 | s = "“学习强国”学习平台";
1011 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1012 | click(aCatlog);
1013 | sleep(1000);
1014 | continue;
1015 | }
1016 |
1017 | if (id("v_play").exists() || id("bg_play").exists())//进入电台页面2020.09.28
1018 | {
1019 | console.warn("进入电台界面,退出并进下一篇文章!");
1020 | t++;
1021 | if (id("btn_back").exists()){
1022 | id("btn_back").findOnce().click();//返回 2020.09.28需关闭电台收听
1023 | }else{
1024 | back;}//返回 2020.09.28需关闭电台收听
1025 | while (!id("home_bottom_tab_button_work").exists());
1026 | id("home_bottom_tab_button_work").findOne().click();
1027 | sleep(1000);
1028 | num = random(0, commentText.length - 1) ;//重取随机数
1029 | aCatlog = aCat[num] ;
1030 | s = "“学习强国”学习平台";
1031 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1032 | click(aCatlog);
1033 | sleep(1000);
1034 | continue;
1035 | }
1036 |
1037 | if (zt_flag == true)//进入专题页标志
1038 | {
1039 | console.warn("进入了专题界面,退出并进下一篇文章!")
1040 | t++;
1041 | back();
1042 | sleep(1000);
1043 | zt_flag = false;
1044 | continue;
1045 | }
1046 | console.log("正在学习第" + (i + 1) + "篇文章...");
1047 | fail = 0;//失败次数清0
1048 | article_timing(i, aTime);
1049 | if (i < cCount)//收藏分享2篇文章
1050 | {
1051 | CollectAndShare(i);//收藏+分享 若运行到此报错请注释本行!
1052 | Comment(i);//评论
1053 | }
1054 | back();//返回主界面
1055 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1056 | sleep(1000);
1057 | i++;
1058 | t++;//t为实际点击的文章控件在当前布局中的标号,和i不同,勿改动!
1059 | }else {
1060 | if (id("v_play").exists() || id("bg_play").exists())//进入电台页面2020.09.28
1061 | {
1062 | console.warn("进入电台界面,退出并进下一篇文章!");
1063 | t++;
1064 | if (id("btn_back").exists()){
1065 | id("btn_back").findOnce().click();//返回 2020.09.28需关闭电台收听
1066 | }else{
1067 | back;}
1068 | while (!id("home_bottom_tab_button_work").exists());
1069 | id("home_bottom_tab_button_work").findOne().click();
1070 | sleep(1000);
1071 | num = random(0, commentText.length - 1) ;//重取随机数
1072 | aCatlog = aCat[num] ;
1073 | s = "“学习强国”学习平台";
1074 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1075 | click(aCatlog);
1076 | sleep(1000);
1077 | continue;
1078 | }
1079 |
1080 | if (i == 0)//如果第一次点击就没点击成功则认为首页无当天文章
1081 | {
1082 | date_string = getYestardayDateString();
1083 | s = date_string;
1084 | /*s = "“学习强国”学习平台";*/
1085 | num = random(0, commentText.length - 1) ;//重取随机数
1086 | aCatlog = aCat[num] ;
1087 | click(aCatlog);
1088 | console.warn("首页没有找到当天文章,即将学习昨日新闻!"+aCatlog + s);
1089 | continue;
1090 | }
1091 |
1092 | if (fail > 3)//连续翻几页没有点击成功则认为今天的新闻还没出来,学习昨天的
1093 | {
1094 | date_string = getYestardayDateString();
1095 | /*s = date_string;*/
1096 | s = "“学习强国”学习平台";
1097 | num = random(0, commentText.length - 1) ;//重取随机数
1098 | aCatlog = aCat[num] ;
1099 | click(aCatlog);
1100 | console.warn("没有找到当天文章,即将学习昨日新闻!"+aCatlog + s);
1101 | fail = 0;//失败次数清0
1102 | continue;
1103 | }
1104 |
1105 | if (!textContains(s).exists())//当前页面当天新闻
1106 | {
1107 | fail++;//失败次数加一
1108 | }
1109 | listView.scrollForward();//向下滑动(翻页)
1110 | t = 0;
1111 | sleep(1500);
1112 | }
1113 | }
1114 | }
1115 |
1116 | //基于第一个,加入阅读记忆
1117 | function articleStudy2() {
1118 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1119 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1120 | sleep(2000);
1121 | var aCatlog = aCat[num] ;//文章学习类别,随机取"推荐""要闻"、"新思想"
1122 | var date_string = getTodayDateString();//获取当天日期字符串
1123 | var s = date_string;
1124 | var listView = className("ListView");//获取文章ListView控件用于翻页
1125 | click(aCatlog);
1126 | sleep(2000);
1127 | var zt_flag = false;//判断进入专题界面标志
1128 | var fail = 0;//点击失败次数
1129 | console.log('文章类别:' + aCatlog)
1130 | for (var i = 0, t = 0;i < aCount;) {
1131 | // lynuo
1132 | let click_tag = false;
1133 | let obj = id("general_card_title_id").findOnce(t);
1134 | sleep(200);
1135 | console.error(obj);
1136 | if(obj != null){
1137 | let tit = obj.text();
1138 | console.info(tit);
1139 | let dd = checkAndArticle(tit);
1140 | if(!dd) click_tag = click(tit);
1141 | };
1142 | // lynuo
1143 | if (click_tag == true)//如果点击成功则进入文章页面,不成功意味着本页已经到底,要翻页
1144 | {
1145 | let n = 0;
1146 | while (!textContains("欢迎发表你的观点").exists())//如果没有找到评论框则认为没有进入文章界面,一直等待
1147 | {
1148 | sleep(1000);
1149 | console.warn("正在等待加载文章界面...");
1150 | if (n > 3)//等待超过3秒则认为进入了专题界面,退出进下一篇文章
1151 | {
1152 | console.warn("没找到评论框!该界面非文章界面!");
1153 | zt_flag = true;
1154 | break;
1155 | }
1156 | n++;
1157 | }
1158 | if (textContains("央视网").exists() || textContains("广播").exists() || textContains("中央广播电视总台").exists() ||textContains("播放").exists() ||textContains("展开").exists() )//如果存在“央视网、中央广播电视总台、播放、展开”则认为进入了视频需退出。关键词测试
1159 | {
1160 | console.warn("进入视频界面,退出并进下一篇文章!");
1161 | t++;
1162 | back();
1163 | /* while (!id("home_bottom_tab_button_work").exists());
1164 | sleep(500);
1165 | click("电台");
1166 | sleep(1000);
1167 | click("最近收听");
1168 | console.log("因广播被打断,重新收听广播...");
1169 | sleep(1000);
1170 | back();*/
1171 | while (!id("home_bottom_tab_button_work").exists());
1172 | id("home_bottom_tab_button_work").findOne().click();
1173 | sleep(1000);
1174 | num = random(0, commentText.length - 1) ;//重取随机数
1175 | aCatlog = aCat[num] ;
1176 | s = "“学习强国”学习平台";
1177 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1178 | click(aCatlog);
1179 | sleep(1000);
1180 | continue;
1181 | }
1182 |
1183 | if (id("v_play").exists() || id("bg_play").exists())//进入电台页面2020.09.28
1184 | {
1185 | console.warn("进入电台界面,退出并进下一篇文章!");
1186 | t++;
1187 | if (id("btn_back").exists()){
1188 | id("btn_back").findOnce().click();//返回 2020.09.28需关闭电台收听
1189 | }else{
1190 | back;}//返回 2020.09.28需关闭电台收听
1191 | while (!id("home_bottom_tab_button_work").exists());
1192 | id("home_bottom_tab_button_work").findOne().click();
1193 | sleep(1000);
1194 | num = random(0, commentText.length - 1) ;//重取随机数
1195 | aCatlog = aCat[num] ;
1196 | s = "“学习强国”学习平台";
1197 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1198 | click(aCatlog);
1199 | sleep(1000);
1200 | continue;
1201 | }
1202 |
1203 | if (zt_flag == true)//进入专题页标志
1204 | {
1205 | console.warn("进入了专题界面,退出并进下一篇文章!")
1206 | t++;
1207 | back();
1208 | sleep(1000);
1209 | zt_flag = false;
1210 | continue;
1211 | }
1212 | console.log("正在学习第" + (i + 1) + "篇文章...");
1213 | fail = 0;//失败次数清0
1214 | article_timing(i, aTime);
1215 | if (i < cCount)//收藏分享2篇文章
1216 | {
1217 | CollectAndShare(i);//收藏+分享 若运行到此报错请注释本行!
1218 | Comment(i);//评论
1219 | }
1220 | back();//返回主界面
1221 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1222 | sleep(1000);
1223 | i++;
1224 | t++;//t为实际点击的文章控件在当前布局中的标号,和i不同,勿改动!
1225 | }else {
1226 | if (id("v_play").exists() || id("bg_play").exists())//进入电台页面2020.09.28
1227 | {
1228 | console.warn("进入电台界面,退出并进下一篇文章!");
1229 | t++;
1230 | if (id("btn_back").exists()){
1231 | id("btn_back").findOnce().click();//返回 2020.09.28需关闭电台收听
1232 | }else{
1233 | back;}
1234 | while (!id("home_bottom_tab_button_work").exists());
1235 | id("home_bottom_tab_button_work").findOne().click();
1236 | sleep(1000);
1237 | num = random(0, commentText.length - 1) ;//重取随机数
1238 | aCatlog = aCat[num] ;
1239 | s = "“学习强国”学习平台";
1240 | console.log('文章类别:' + aCatlog + '关键词:'+ s)
1241 | click(aCatlog);
1242 | sleep(1000);
1243 | continue;
1244 | }
1245 |
1246 | if (i == 0)//如果第一次点击就没点击成功则认为首页无当天文章
1247 | {
1248 | date_string = getYestardayDateString();
1249 | s = date_string;
1250 | /*s = "“学习强国”学习平台";*/
1251 | num = random(0, commentText.length - 1) ;//重取随机数
1252 | aCatlog = aCat[num] ;
1253 | click(aCatlog);
1254 | console.warn("首页没有找到当天文章,即将学习昨日新闻!"+aCatlog + s);
1255 | continue;
1256 | }
1257 |
1258 | if (fail > 3)//连续翻几页没有点击成功则认为今天的新闻还没出来,学习昨天的
1259 | {
1260 | date_string = getYestardayDateString();
1261 | /*s = date_string;*/
1262 | s = "“学习强国”学习平台";
1263 | num = random(0, commentText.length - 1) ;//重取随机数
1264 | aCatlog = aCat[num] ;
1265 | click(aCatlog);
1266 | console.warn("没有找到当天文章,即将学习昨日新闻!"+aCatlog + s);
1267 | fail = 0;//失败次数清0
1268 | continue;
1269 | }
1270 |
1271 | if (!textContains(s).exists())//当前页面当天新闻
1272 | {
1273 | fail++;//失败次数加一
1274 | }
1275 | listView.scrollForward();//向下滑动(翻页)
1276 | t = 0;
1277 | sleep(1500);
1278 | }
1279 | }
1280 | }
1281 |
1282 | /**
1283 | * @description: “百灵”小视频学习函数
1284 | * @param: vCount,vTime
1285 | * @return: null
1286 | */
1287 | function videoStudy_bailing() {
1288 | var dw = device.width;
1289 | var dh = device.height;
1290 | var vtop = ["推荐","党史","竖","炫","窗","藏","靓","秀","熊猫","美食","虹"];
1291 | var vitem = vtop[random(0,vtop.length - 1)];
1292 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1293 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1294 | sleep(4000);
1295 | click("百灵");
1296 | sleep(4000);
1297 | log("选择" + vitem);
1298 | log("看视频数量:" + vCount +"个\n视频时长:" + vTime + "秒");
1299 | click(vitem);
1300 | sleep(5000);
1301 | if(textContains(":").exists()){
1302 | // var a = textContains(":").findOne().parent().parent().parent();//根据控件搜索视频框,但部分手机不适配,改用下面坐标点击
1303 | // a.click();
1304 | click(":");//兼容性程序,无法保证运行,需要者自行请修改
1305 | toastLog("控件操作");
1306 | }
1307 | else{
1308 | click((dw/3*2)+random()*10,dh/6);//坐标点击第一个视频
1309 | toastLog("坐标操作");
1310 | }
1311 |
1312 | sleep(4000);
1313 | for (var i = 0;i < vCount;i++) {
1314 | console.log("正在观看第" + (i + 1) + "个小视频");
1315 | if(video_timing_bailing(i, vTime)==false) return false;//观看每个小视频
1316 | if (i != vCount - 1) {
1317 | swipe(dw/3*2,dh/6*5,dw/3*2,dh/6, 500);//往下翻(纵坐标从5/6处滑到1/6处)
1318 | }
1319 | }
1320 | back();
1321 | sleep(2000);
1322 | }
1323 |
1324 | /**
1325 | * @description: 听“电台”新闻广播函数 补视听时长
1326 | * @param: null
1327 | * @return: null
1328 | */
1329 | function listenToRadio() {
1330 | var r_start = new Date().getTime();//广播开始时间
1331 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1332 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1333 | sleep(2000);
1334 | click("电台");
1335 | sleep(1000);
1336 | click("听广播");//202012听新闻广播 改为 听广播
1337 | sleep(2000);
1338 | if (textContains("最近收听").exists()) {
1339 | click("最近收听");
1340 | console.log("正在收听广播...");
1341 | sleep(1000);
1342 | back();//返回
1343 | sleep(1000);
1344 | }
1345 | if (textContains("推荐收听").exists()) {
1346 | click("推荐收听");
1347 | console.log("正在收听广播...");
1348 | sleep(1000);
1349 | back();//返回
1350 | sleep(1000);
1351 | }
1352 | id("home_bottom_tab_button_work").findOne().click();
1353 | sleep(1000);
1354 | var r_end = new Date().getTime();//广播结束时间
1355 | var radio_time = (parseInt((r_end - r_start) / 1000));//广播已经收听的时间
1356 | var left_time =rTime - radio_time;
1357 | radio_timing(parseInt((r_end - r_start) / 1000), left_time);//广播剩余需收听时间
1358 | }
1359 |
1360 | /**
1361 | @description: 停止广播
1362 | @param: null
1363 | @return: null
1364 | */
1365 | function stopRadio() {
1366 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1367 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1368 | sleep(2000);
1369 | console.log("停止收听广播!");
1370 | click("电台");
1371 | sleep(1000);
1372 | click("听广播");//202012听新闻广播 改 听广播
1373 | sleep(2000);
1374 | while (!(textContains("正在收听").exists() || textContains("最近收听").exists() || textContains("推荐收听").exists())) {
1375 | log("等待加载");
1376 | sleep(2000);
1377 | }
1378 | if (textContains("正在收听").exists()) {
1379 | click("正在收听");
1380 | console.log("正在停止广播...");
1381 | sleep(2000);
1382 | id("v_play").findOnce(0).click();//点击暂停播放按钮
1383 | sleep(2000);
1384 | if (id("btn_back").findOne().click() == 0) {//后退
1385 | sleep(2000);
1386 | back();
1387 | }
1388 | }
1389 | console.log("广播已停止播放...");
1390 | sleep(1000);
1391 | if (!id("home_bottom_tab_button_work").exists()) {
1392 | start_app(1);
1393 | }
1394 | sleep(1000);
1395 | }
1396 |
1397 |
1398 | /**
1399 | * @description: 收藏加分享函数 (收藏+分享)---1+1=2分
1400 | * @param: i-文章标号
1401 | * @return: null
1402 | */
1403 | function CollectAndShare(i) {
1404 | while (!textContains("欢迎发表你的观点").exists())//如果没有找到评论框则认为没有进入文章界面,一直等待
1405 | {
1406 | sleep(1000);
1407 | console.log("等待进入文章界面")
1408 | }
1409 | console.log("正在进行第" + (i + 1) + "次收藏和分享...");
1410 |
1411 | var textOrder = text("欢迎发表你的观点").findOnce().drawingOrder();
1412 | var collectOrder = textOrder + 2;
1413 | var shareOrder = textOrder + 3;
1414 | var collectIcon = className("ImageView").filter(function (iv) {
1415 | return iv.drawingOrder() == collectOrder;
1416 | }).findOnce();
1417 |
1418 | var shareIcon = className("ImageView").filter(function (iv) {
1419 | return iv.drawingOrder() == shareOrder;
1420 | }).findOnce();
1421 |
1422 | //var collectIcon = classNameContains("ImageView").depth(10).findOnce(0);//右下角收藏按钮
1423 | collectIcon.click();//点击收藏
1424 | console.info("收藏成功!");
1425 | sleep(1000);
1426 |
1427 | //var shareIcon = classNameContains("ImageView").depth(10).findOnce(1);//右下角分享按钮
1428 | shareIcon.click();//点击分享
1429 | while (!textContains("分享到学习强国").exists());//等待弹出分享选项界面
1430 | sleep(1000);
1431 | click("分享到学习强国");
1432 | sleep(2000);
1433 | console.info("分享成功!");
1434 | back();//返回文章界面
1435 | sleep(1000);
1436 | collectIcon.click();//再次点击,取消收藏
1437 | console.info("取消收藏!");
1438 | sleep(1000);
1439 | }
1440 |
1441 | /**
1442 | * @description: 评论函数---2次
1443 | * @param: i-文章标号
1444 | * @return: null
1445 | */
1446 | function Comment(i) {
1447 | while (!textContains("欢迎发表你的观点").exists())//如果没有找到评论框则认为没有进入文章界面,一直等待
1448 | {
1449 | sleep(1000);
1450 | console.log("等待进入文章界面")
1451 | }
1452 | click("欢迎发表你的观点");//单击评论框
1453 | console.log("正在进行第" + (i + 1) + "次评论...");
1454 | sleep(1000);
1455 | var num = random(0, commentText.length - 1)//随机数
1456 | setText(commentText[num]);//输入评论内容
1457 | sleep(1000);
1458 | click("发布");//点击右上角发布按钮
1459 | console.info("评论成功!");
1460 | sleep(2000);
1461 | click("删除");//删除该评论
1462 | sleep(2000);
1463 | click("确认");//确认删除
1464 | console.info("评论删除成功!");
1465 | sleep(1000);
1466 | }
1467 |
1468 |
1469 | /**
1470 | * @description: 本地频道
1471 | * @param: null
1472 | * @return: null
1473 | */
1474 | //基于控件点击 20200911 部分手机 本地在频道列表为控件3 但部分为控件14,可点击后基于切换地区判断。
1475 | //20201020如果在综合页面进入本地,则识别不到新思想,因此改基于综合判断。20201022 山东省界面更新频道内控件3会跳转外部链接故改0
1476 | //20210116 控件14改动为15,控件3有无变动未知
1477 | function localChannel1() {
1478 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1479 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1480 | sleep(2000);
1481 | console.log("点击本地频道");
1482 | sleep(1000);
1483 | if (className("android.widget.TextView").text("综合").exists()) {
1484 | className("android.widget.TextView").text("综合").findOne().parent().parent().child(3).click();
1485 | sleep(2000);
1486 | if(className("android.widget.TextView").text("切换地区").exists()){
1487 | className("android.support.v7.widget.RecyclerView").findOne().child(0).click();
1488 | sleep(2000);
1489 | console.log("返回主界面");
1490 | back();
1491 | className("android.widget.TextView").text("综合").findOne().parent().parent().child(0).click();
1492 | }else{
1493 | className("android.widget.TextView").text("综合").findOne().parent().parent().child(15).click();//14 15
1494 | sleep(2000);
1495 | className("android.support.v7.widget.RecyclerView").findOne().child(0).click();
1496 | sleep(2000);
1497 | console.log("返回主界面");
1498 | back();
1499 | className("android.widget.TextView").text("综合").findOne().parent().parent().child(11).click();
1500 | }
1501 | id("home_bottom_tab_button_work").findOne().click();
1502 | sleep(1000);
1503 | }else {
1504 | console.log("请手动点击本地频道!");
1505 | }
1506 | }
1507 |
1508 | /**
1509 | * @description: 日期转字符串函数
1510 | * @param: y,m,d 日期数字 2020 xx xx
1511 | * @return: s 日期字符串 "2019-xx-xx"
1512 | */
1513 | function dateToString(y, m, d) {
1514 | var year = y.toString();
1515 | if ((m + 1) < 10) {
1516 | var month = "0" + (m + 1).toString();
1517 | }else {
1518 | var month = (m + 1).toString();
1519 | }
1520 | if (d < 10) {
1521 | var day = "0" + d.toString();
1522 | }else {
1523 | var day = d.toString();
1524 | }
1525 | var s = year + "-" + month + "-" + day;//年-月-日
1526 | return s;
1527 | }
1528 |
1529 | /**
1530 | * @description: 获取当天日期
1531 | * @param: null
1532 | * @return: s 日期字符串 "2020 xx xx"
1533 | */
1534 | function getTodayDateString() {
1535 | var date = new Date();
1536 | var y = date.getFullYear();
1537 | var m = date.getMonth();
1538 | var d = date.getDate();
1539 | var s = dateToString(y, m, d);//年,月,日
1540 | return s
1541 | }
1542 |
1543 | /**
1544 | * @description: 获取昨天日期
1545 | * @param: null
1546 | * @return: s 日期字符串 "2020 xx xx"
1547 | */
1548 | function getYestardayDateString() {
1549 | var date = new Date();
1550 | num++;//num是程序开始获取的随机数,前1-3天,+1防止num=0的情况
1551 | date.setDate(date.getDate() - num);
1552 | var y = date.getFullYear();
1553 | var m = date.getMonth();
1554 | var d = date.getDate();
1555 | var s = dateToString(y, m, d);//年,月,日
1556 | return s
1557 | }
1558 |
1559 |
1560 | /*************************************************挑战 争上游 双人答题部分******************************************************/
1561 |
1562 | function indexFromChar(str) {
1563 | return str.charCodeAt(0) - "A".charCodeAt(0);
1564 | }
1565 |
1566 | /**
1567 | * @description: 四人赛 20200928增加
1568 | * @param: null
1569 | * @return: null
1570 | */
1571 | function zsyQuestion() {
1572 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1573 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1574 | sleep(2000);
1575 | text("我的").click();
1576 | if (!textContains("我要答题").exists()) {
1577 | sleep(1000);
1578 | click("我要答题");
1579 | }else {
1580 | (!text("我要答题").exists());
1581 | sleep(1000);
1582 | text("我要答题").findOne().parent().click();
1583 | }
1584 | while (!text("答题练习").exists());//可用词:排行榜 答题竞赛
1585 | sleep(1000);
1586 | className("android.view.View").text("答题练习").findOne().parent().child(8).click();
1587 | console.log("开始四人赛")
1588 | sleep(2000);
1589 | if(className("android.view.View").text("开始比赛").exists()){
1590 | className("android.view.View").text("开始比赛").findOne().click();
1591 | }
1592 | sleep(3000);
1593 | if (className("android.widget.Button").text("知道了").exists() || className("android.view.View").text("温馨提示").exists() || className("android.view.View").text("您已超过今日对战次数,请明日再来。").exists() ){
1594 | console.log("今日已完成30次对战,请明日再来");
1595 | back();sleep(1000);
1596 | back();sleep(1000);
1597 | back();sleep(1000);
1598 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1599 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1600 | return;
1601 | }
1602 | sleep(3000);
1603 | let zNum = 0;//轮数
1604 | while (true) {
1605 | if (className("android.view.View").text("继续挑战").exists() || textContains("继续挑战").exists())//遇到继续挑战,则本局结束
1606 | {console.info("四人赛本局结束!");
1607 | zNum++;
1608 | if (zNum >= zCount) {
1609 | console.log("四人赛结束,返回主页!");
1610 | //回退4次返回主页
1611 | back();sleep(1000);
1612 | back();sleep(1000);
1613 | back();sleep(1000);
1614 | back();sleep(1000);
1615 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1616 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1617 | break;
1618 | }else {
1619 | console.log("即将开始下一轮...")
1620 | sleep(2000);//等待2秒开始下一轮
1621 | back();
1622 | sleep(1000);
1623 | back();
1624 | while (!text("答题练习").exists());//排行榜 答题竞赛
1625 | sleep(1000);
1626 | className("android.view.View").text("答题练习").findOne().parent().child(8).click();
1627 | console.log("开始四人赛")
1628 | sleep(2000);
1629 | if (className("android.view.View").text("开始比赛").exists()){
1630 | className("android.view.View").text("开始比赛").findOne().click();
1631 | }
1632 | sleep(3000);
1633 | if (className("android.widget.Button").text("知道了").exists() || className("android.view.View").text("温馨提示").exists() || className("android.view.View").text("您已超过今日对战次数,请明日再来。").exists() ){
1634 | console.log("今日已完成30次对战,请明日再来");
1635 | back();sleep(1000);
1636 | back();sleep(1000);
1637 | back();sleep(1000);
1638 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1639 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1640 | return;
1641 | }
1642 | sleep(3000);
1643 | }
1644 | console.warn("第" + (zNum + 1).toString() + "轮开始...")
1645 | }
1646 | if (/*textContains("距离答题结束").exists() &&*/ !text("继续挑战").exists()){//20201225答题界面变化 距离答题结束 删除
1647 | zsyQuestionLoop();
1648 | }
1649 | }
1650 | }
1651 |
1652 | /**
1653 | * @description: 双人对战答题 20200928增加
1654 | * @param: null
1655 | * @return: null
1656 | */
1657 | function SRQuestion() {
1658 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1659 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1660 | sleep(2000);
1661 | text("我的").click();
1662 | if (!textContains("我要答题").exists()) {
1663 | sleep(1000);
1664 | click("我要答题");
1665 | }else {
1666 | (!text("我要答题").exists());
1667 | sleep(1000);
1668 | text("我要答题").findOne().parent().click();
1669 | }
1670 | while (!text("答题练习").exists());//可用词:排行榜 答题竞赛
1671 | sleep(1000);
1672 | className("android.view.View").text("答题练习").findOne().parent().child(9).click();
1673 | console.log("开始双人对战")
1674 | sleep(2000);
1675 | if(className("android.view.View").text("邀请对手").exists()){
1676 | className("android.view.View").text("邀请对手").findOne().parent().child(0).click();
1677 | }//原为随机邀请对手
1678 | if(className("android.view.View").text("随机匹配").exists()){
1679 | className("android.view.View").text("随机匹配").findOne().parent().child(0).click();
1680 | }//20200125修改为邀请好友&随机匹配
1681 | sleep(1000);
1682 | if(className("android.view.View").text("开始对战").exists()){
1683 | className("android.view.View").text("开始对战").findOne().click();
1684 | }
1685 | sleep(3000);
1686 | if (className("android.widget.Button").text("知道了").exists() || className("android.view.View").text("温馨提示").exists() || className("android.view.View").text("您已超过今日对战次数,请明日再来。").exists() ){
1687 | console.log("今日已完成30次对战,请明日再来");
1688 | back();sleep(1000);
1689 | back();sleep(1000);
1690 | back();sleep(1000);
1691 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1692 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1693 | return;
1694 | }
1695 | sleep(3000);
1696 | let zNum = 1;//轮数
1697 | while (true) {
1698 | if (className("android.view.View").text("继续挑战").exists() || textContains("继续挑战").exists())//遇到继续挑战,则本局结束
1699 | {console.info("双人对战本局结束!");
1700 | zNum++;
1701 | if (zNum >= zCount) {
1702 | console.log("双人对战结束!返回主页!");
1703 | //回退4次返回主页
1704 | back();sleep(1000);
1705 | back();sleep(1000);
1706 | if (text("退出").exists()){
1707 | className("android.widget.Button").text("退出").findOne().click();
1708 | sleep(1000);
1709 | }
1710 | back();sleep(1000);
1711 | back();sleep(1000);
1712 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1713 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1714 | break;
1715 | }else {
1716 | console.log("即将开始下一轮...")
1717 | back();
1718 | sleep(1000);
1719 | back();
1720 | sleep(1000);
1721 | if (textContains("退出").exists()){
1722 | className("android.widget.Button").text("退出").findOne().click();
1723 | sleep(1000);
1724 | }
1725 | while (!text("答题练习").exists());//排行榜 答题竞赛
1726 | sleep(1000);
1727 | className("android.view.View").text("答题练习").findOne().parent().child(9).click();
1728 | console.log("开始双人对战");
1729 | sleep(2000);
1730 | if(className("android.view.View").text("邀请对手").exists()){
1731 | className("android.view.View").text("邀请对手").findOne().parent().child(0).click();
1732 | }//原为随机邀请对手
1733 | if(className("android.view.View").text("随机匹配").exists()){
1734 | className("android.view.View").text("随机匹配").findOne().parent().child(0).click();
1735 | }//20200125修改为邀请好友&随机匹配
1736 | sleep(1000);
1737 | if(className("android.view.View").text("开始对战").exists()){
1738 | className("android.view.View").text("开始对战").findOne().click();
1739 | }
1740 | sleep(3000);
1741 | if (className("android.widget.Button").text("知道了").exists() || className("android.view.View").text("温馨提示").exists() || className("android.view.View").text("您已超过今日对战次数,请明日再来。").exists() ){
1742 | console.log("今日已完成30次对战,请明日再来");
1743 | back();sleep(1000);
1744 | back();sleep(1000);
1745 | back();sleep(1000);
1746 | if (id("my_display_name").exists()){//我的主页,再退一步回主页
1747 | back();sleep(1000);}//单纯back有概率退出但又有可能只退到我的页面 故加判断
1748 | return;
1749 | }
1750 | sleep(3000);
1751 | }
1752 | console.warn("第" + zNum.toString() + "轮开始...")
1753 | }
1754 | if (/*textContains("距离答题结束").exists() &&*/ !text("继续挑战").exists()){//20201225界面变化 距离答题结束 删除
1755 | zsyQuestionLoop();
1756 | }
1757 | }
1758 | }
1759 |
1760 | /**
1761 | * @description: 四人赛 双人对战答题循环
1762 | * @param: null
1763 | * @return: null
1764 | */
1765 | //循环1 基于延时进行题目刷新做题,4+0.3秒,结束偶尔故障;20201022修改为基于前后题目判断
1766 | function zsyQuestionLoop() {
1767 | let ClickAnswer;
1768 | try{//20201025使用try catch(e)语句处理错误,去除前后置0.5s延时
1769 | if (!className("RadioButton").exists() || className("android.view.View").text("继续挑战").exists() || textContains("继续挑战").exists() /*|| !textContains("距离答题结束").exists()*/){//不存在本局结束标志 继续挑战,则执行 20201225界面变化,距离答题结束 删除
1770 | /*console.info("答题结束!");*/ //配合20201225界面变化 距离答题结束 去除,本语句去除
1771 | return;
1772 | }else {
1773 | while(!className("RadioButton").exists());//@KB64ba建议使用while判断
1774 | if (className("RadioButton").exists() || aquestion.length == 0) {
1775 | var aquestion = className("ListView").findOnce().parent().child(0).text();
1776 | var question = aquestion.substring(3);//争上游和对战题目前带1.2.3.需去除
1777 | while (aquestion == oldaquestion || question == "") {
1778 | if (!className("RadioButton").exists() || className("android.view.View").text("继续挑战").exists() || textContains("继续挑战").exists()) {
1779 | console.info("答题结束!");
1780 | return;
1781 | }else if(className("RadioButton").exists()){
1782 | aquestion = className("ListView").findOnce().parent().child(0).text();
1783 | question = aquestion.substring(3);
1784 | }
1785 | }
1786 | }
1787 | else {
1788 | console.error("提取题目失败!");
1789 | let listArray = className("ListView").findOnce().children();//题目选项列表
1790 | let i = random(0, listArray.length - 1);
1791 | console.log("随机点击");
1792 | listArray[i].child(0).click();//随意点击一个答案
1793 | ClickAnswer = listArray[i].child(0).child(1).text();//记录已点击答案
1794 | console.log("随机点击:"+ClickAnswer);
1795 | return;
1796 | }
1797 | var chutiIndex = question.lastIndexOf("出题单位");//@chongyadong添加
1798 | if (chutiIndex != -1) {
1799 | question = question.substring(0, chutiIndex - 2);
1800 | }
1801 | question = question.replace(/\s/g, "");
1802 | var options = [];//选项列表
1803 | if (className("RadioButton").exists()) {
1804 | className("ListView").findOne().children().forEach(child => {
1805 | var answer_q = child.child(0).child(1).text();
1806 | options.push(answer_q);
1807 | });
1808 | }else {
1809 | console.error("答案获取失败!");
1810 | return;
1811 | }
1812 | if (aquestion != oldaquestion){
1813 | if (question == ZiXingTi.replace(/\s/g, "") || question == DuYinTi.replace(/\s/g, "") || question == ErShiSiShi.replace(/\s/g, "")) {
1814 | question = question + options[0].substring(3);//字形题 读音题 二十四史 在题目后面添加第一选项,选项带A.去除
1815 | }
1816 | console.log(aquestion.substring(0,2) + "题目:" + question);
1817 | var answer = getAnswer(question, 'tikuNet');
1818 | console.info("答案:" + answer);
1819 | if (/^[a-zA-Z]{1}$/.test(answer)) {//如果为ABCD形式
1820 | var indexAnsTiku = indexFromChar(answer.toUpperCase());
1821 | answer = options[indexAnsTiku];
1822 | toastLog("answer from char=" + answer);
1823 | }
1824 | let hasClicked = false;
1825 | let listArray = className("ListView").findOnce().children();//题目选项列表
1826 | /* if (answer == "")*/ //如果没找到答案
1827 | if(answer.length ==0){
1828 | let i = random(0, listArray.length - 1);
1829 | console.error("没有找到答案,随机点击");
1830 | listArray[i].child(0).click();//随意点击一个答案
1831 | hasClicked = true;
1832 | ClickAnswer = listArray[i].child(0).child(1).text();;//记录已点击答案
1833 | console.log("随机点击:"+ClickAnswer);
1834 | console.log("---------------------------");
1835 | // checkAndUpdate(question,"",ClickAnswer);//更新答案
1836 | }else{//如果找到了答案 该部分问题: 选项带A.B.C.D.,题库返回答案不带,char返回答案带
1837 | var answer_a = answer.substring(0,2);//定义answer_a,获取答案前两个字符对比A.B.C.D.应该不会出现E选项
1838 | if(answer_a == "A." || answer_a == "B." || answer_a == "C." || answer_a =="D."){
1839 | listArray.forEach(item => {
1840 | var listDescStrb = item.child(0).child(1).text();
1841 | if (listDescStrb == answer) {
1842 | item.child(0).click();//点击答案
1843 | hasClicked = true;
1844 | console.log("---------------------------");
1845 | }
1846 | });
1847 | }else{
1848 | listArray.forEach(item => {
1849 | var listDescStra = item.child(0).child(1).text();
1850 | var listDescStrb = listDescStra.substring(3);//选项去除A.B.C.D.再与answer对比
1851 | if (listDescStrb == answer) {
1852 | item.child(0).click();//点击答案
1853 | hasClicked = true;
1854 |
1855 | console.log("---------------------------");
1856 | }
1857 | });
1858 | }
1859 | }
1860 | if (!hasClicked)//如果没有点击成功
1861 | {
1862 | console.error("未能成功点击,随机点击");
1863 | let i = random(0, listArray.length - 1);
1864 | listArray[i].child(0).click();//随意点击一个答案
1865 | ClickAnswer = listArray[i].child(0).child(1).text();;//记录已点击答案
1866 | console.log("随机点击:"+ClickAnswer);
1867 | console.log("---------------------------");
1868 | }
1869 | }
1870 | oldaquestion = aquestion;
1871 | /*sleep(500);*/
1872 | }
1873 | //sleep(3500);//后置3.5延时与前置0.5构成4s延时
1874 | }catch (e){
1875 | sleep(3000);
1876 | if (!className("RadioButton").exists() || className("android.view.View").text("继续挑战").exists() || textContains("继续挑战").exists() /*|| !textContains("距离答题结束").exists()*/){//不存在本局结束标志 继续挑战,则执行
1877 | /*console.info("答题结束!");*/ //配合20201225界面变化 距离答题结束 删除,本语句删除
1878 | return;
1879 | }
1880 | }
1881 | }
1882 |
1883 | /**
1884 | * @description: 挑战答题
1885 | * @param: null
1886 | * @return: null
1887 | */
1888 | function challengeQuestion() {
1889 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
1890 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
1891 | sleep(2000);
1892 | text("我的").click();
1893 | if (!textContains("我要答题").exists()) {
1894 | sleep(1000);
1895 | click("我要答题");
1896 | }else {
1897 | (!text("我要答题").exists());
1898 | sleep(1000);
1899 | text("我要答题").findOne().parent().click();
1900 | }
1901 | if(!textContains("答题练习").exists()){
1902 | while (!text("答题练习").exists());//排行榜 答题竞赛
1903 | sleep(1000);
1904 | className("android.view.View").text("答题练习").findOne().parent().child(10).click();
1905 | }else{
1906 | while (!text("挑战答题").exists());
1907 | sleep(1000);
1908 | text("挑战答题").click();//原流程,20200910改版,ver2.14不会自动更新,因可以判断故保留。
1909 | }
1910 | console.log("开始挑战答题")
1911 | sleep(4000);
1912 | let conNum = 0;//连续答对的次数
1913 | let lNum = 1;//轮数
1914 | while (true) {
1915 | challengeQuestionLoop(conNum);
1916 | sleep(4000);
1917 | if (text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
1918 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
1919 | {//该部分修改,逻辑为a:>=5题,失败则结束挑战答题返回主界面;b0:<5题,第一次失败,分享复活;b1:分享复活再次失败,仍<5题,需再来一局;b2:分享复活再次失败,已>5题,结束挑战答题返回主界面
1920 | sleep(2000);
1921 | if (lNum >= lCount && conNum >= qCount) {
1922 | console.log("挑战答题结束!返回主页!");
1923 | if(textContains("结束本局").exists()){
1924 | /*在分享页面回退4次返回主页*/
1925 | back();sleep(1000);
1926 | back();sleep(1000);
1927 | back();sleep(1000);
1928 | back();sleep(1000);
1929 | }else{
1930 | /*在本局结束页面回退3次返回主页*/
1931 | back();sleep(1000);
1932 | back();sleep(1000);
1933 | back();sleep(1000);
1934 | }
1935 | break;
1936 | }else if(textContains("分享就能复活").exists() || textContains("每周仅可复活一次").exists()){
1937 | console.log("分享复活...")
1938 | sleep(1000);
1939 | click("分享就能复活");
1940 | sleep(2000);
1941 | console.info("分享成功!");
1942 | back();//返回答题界面
1943 | sleep(4000);
1944 | }else {
1945 | console.log("等3秒开始下一轮...")
1946 | sleep(3000);//等待3秒开始下一轮
1947 | text("再来一局").click();
1948 | sleep(4000);
1949 | if (conNum >= qCount) {
1950 | lNum++;
1951 | }
1952 | conNum = 0;
1953 | }
1954 | console.warn("第" + (lNum+1).toString() + "轮开始...")
1955 | }
1956 | else//答对了
1957 | {
1958 | conNum++;
1959 | }
1960 | }
1961 | }
1962 | /**
1963 | * @description: 挑战答题循环
1964 | * @param: conNum 连续答对的次数
1965 | * @return: null
1966 | */
1967 | function challengeQuestionLoop(conNum) {
1968 | let ClickAnswer;//定义已点击答案
1969 | try {
1970 | if (conNum >= qCount)//答题次数足够退出,每轮qCount=5+随机1-3次
1971 | {
1972 | let listArray = className("ListView").findOnce().children();//题目选项列表
1973 | let i = random(0, listArray.length - 1);
1974 | console.log("本轮答题数足够,随机点击答案");
1975 | var question = className("ListView").findOnce().parent().child(0).text();
1976 | question = question.replace(/\s/g, "");
1977 | var options = [];//选项列表
1978 | if (className("ListView").exists()) {
1979 | className("ListView").findOne().children().forEach(child => {
1980 | var answer_q = child.child(0).child(1).text();
1981 | options.push(answer_q);
1982 | });
1983 | }else {
1984 | console.error("答案获取失败!");
1985 | return;
1986 | }//20201217添加 极低概率下,答题数足够,下一题随机点击,碰到字形题
1987 | if (question == ZiXingTi.replace(/\s/g, "") || question == DuYinTi.replace(/\s/g, "") || question == ErShiSiShi.replace(/\s/g, "")) {
1988 | question = question + options[0];//字形题 读音题 在题目后面添加第一选项
1989 | }
1990 | console.log((conNum + 1).toString() + ".随机点击题目:" + question);
1991 | sleep(random(0.5, 1)*2000);//随机延时0.25-0.5秒
1992 | listArray[i].child(0).click();//随意点击一个答案
1993 | ClickAnswer = listArray[i].child(0).child(1).text();;//记录已点击答案
1994 | console.log("随机点击:"+ClickAnswer);
1995 | //如果随机点击答案正确,则更新到本地题库tiku表
1996 | sleep(500);//等待0.5秒,是否出现X
1997 | if (!text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
1998 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
1999 | {console.info("更新本地题库答案...");
2000 | checkAndUpdate(question, answer, ClickAnswer);
2001 | }
2002 | console.log("---------------------------");
2003 | return;
2004 | }
2005 | if (className("ListView").exists()) {
2006 | var question = className("ListView").findOnce().parent().child(0).text();
2007 | }
2008 | else {
2009 | console.error("提取题目失败!");
2010 | let listArray = className("ListView").findOnce().children();//题目选项列表
2011 | let i = random(0, listArray.length - 1);
2012 | console.log("随机点击");
2013 | sleep(random(0.5, 1)*2000);//随机延时0.25-0.5秒
2014 | listArray[i].child(0).click();//随意点击一个答案
2015 | return;
2016 | }
2017 | var chutiIndex = question.lastIndexOf("出题单位");
2018 | if (chutiIndex != -1) {
2019 | question = question.substring(0, chutiIndex - 2);
2020 | }
2021 | question = question.replace(/\s/g, "");
2022 | var options = [];//选项列表
2023 | if (className("ListView").exists()) {
2024 | className("ListView").findOne().children().forEach(child => {
2025 | var answer_q = child.child(0).child(1).text();
2026 | options.push(answer_q);
2027 | });
2028 | }else {
2029 | console.error("答案获取失败!");
2030 | return;
2031 | }
2032 | if (question == ZiXingTi.replace(/\s/g, "") || question == DuYinTi.replace(/\s/g, "") || question == ErShiSiShi.replace(/\s/g, "")) {
2033 | question = question + options[0];//字形题 读音题 在题目后面添加第一选项
2034 | }
2035 | console.log((conNum + 1).toString() + "搜库题目:" + question);
2036 | var answer = getAnswer(question, 'tikuNet');
2037 | console.info("答案:" + answer);
2038 | if (/^[a-zA-Z]{1}$/.test(answer)) {//如果为ABCD形式
2039 | var indexAnsTiku = indexFromChar(answer.toUpperCase());
2040 | answer = options[indexAnsTiku];
2041 | console.log("answer from char=" + answer);
2042 | //ABCD形式转换为字符串答案;
2043 | var sql = "UPDATE tikuNet SET answer='" + answer + "' WHERE question LIKE '" + question + "'";
2044 | db.execSQL(sql);
2045 | console.warn("答案已转换,下次尝试验证");
2046 |
2047 | }
2048 | let hasClicked = false;
2049 | let listArray = className("ListView").findOnce().children();//题目选项列表
2050 | if (answer == "")//如果没找到答案
2051 | {
2052 | let i = random(0, listArray.length - 1);
2053 | console.error("没有找到答案,随机点击");
2054 | sleep(random(0.5, 1)*2000);//随机延时0.25-0.5秒
2055 | listArray[i].child(0).click();//随意点击一个答案
2056 | ClickAnswer = listArray[i].child(0).child(1).text();;//记录已点击答案
2057 | hasClicked = true;
2058 | console.log("随机点击:"+ClickAnswer);//如果随机点击答案正确,则更新到本地题库tiku表
2059 | sleep(500);//等待0.5秒,是否出现X
2060 | if (!text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
2061 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
2062 | {console.info("更新本地题库答案...");
2063 | checkAndUpdate(question, answer, ClickAnswer);
2064 | }
2065 | console.log("---------------------------");
2066 | }
2067 | else//如果找到了答案
2068 | {
2069 | listArray.forEach(item => {
2070 | let listDescStr = item.child(0).child(1).text();
2071 | if (listDescStr == answer) {
2072 | sleep(random(0.5, 1)*2000);//随机延时0.25-0.5秒
2073 | item.child(0).click();//点击答案
2074 | hasClicked = true;
2075 | sleep(500);//等待0.5秒,是否出现X
2076 | if (!text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
2077 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
2078 | {console.info("题库答案正确……");}
2079 | if (text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
2080 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
2081 | {console.error("题库答案错误!!!");
2082 | var sql = "UPDATE tikuNet SET answer='" + null + "' WHERE question LIKE '" + question + "'";
2083 | db.execSQL(sql);
2084 | console.warn("删除答案");
2085 | sleep(2000);
2086 | }
2087 | console.log("---------------------------");
2088 | }
2089 | });
2090 | }
2091 | if (!hasClicked)//如果没有点击成功
2092 | {//因导致不能成功点击问题较多,故该部分不更新题库,大部分问题是题库题目适配为填空题或多选题或错误选项
2093 | console.error("未能成功点击,随机点击");
2094 | let i = random(0, listArray.length - 1);
2095 | sleep(random(0.5, 1)*2000);//随机延时0.25-0.5秒
2096 | listArray[i].child(0).click();//随意点击一个答案
2097 | console.log("随机点击:"+ClickAnswer);
2098 | sleep(500);//等待0.5秒,是否出现X
2099 | if (!text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
2100 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
2101 | {console.info("随机点击正确……");}
2102 | if (text("v5IOXn6lQWYTJeqX2eHuNcrPesmSud2JdogYyGnRNxujMT8RS7y43zxY4coWepspQkvw" +
2103 | "RDTJtCTsZ5JW+8sGvTRDzFnDeO+BcOEpP0Rte6f+HwcGxeN2dglWfgH8P0C7HkCMJOAAAAAElFTkSuQmCC").exists() || text("再来一局").exists())//遇到❌号,则答错了,不再通过结束本局字样判断
2104 | {console.error("随机点击错误!!!");
2105 | /*checkAndUpdate(question, answer, ClickAnswer);*/
2106 | }
2107 | console.log("---------------------------");
2108 | }
2109 | } catch (error) {
2110 | log(error);
2111 | stop_app();
2112 | }
2113 | }
2114 | /**
2115 | * @description: 从数据库中搜索答案
2116 | * @param: question 问题
2117 | * @return: answer 答案
2118 | */
2119 | function getAnswer(question, table_name) {
2120 | let db = SQLiteDatabase.openOrCreateDatabase(files.path("tiku.db"),null);
2121 | let sql = "SELECT answer FROM " + table_name + " WHERE question LIKE '" + question + "%'"
2122 | var cursor = db.rawQuery(sql, null);
2123 | if (cursor.moveToFirst()) {
2124 | var answer = cursor.getString(0);
2125 | cursor.close();
2126 | return answer;
2127 | }
2128 | else {
2129 | console.error("题库中未找到答案");
2130 | cursor.close();
2131 | return '';
2132 |
2133 | }
2134 | }
2135 |
2136 | /*************************************************每日答题/每周答题部分***************************************************/
2137 |
2138 | /**
2139 | * @description: 每日答题
2140 | * @param: null
2141 | * @return: null
2142 | */
2143 | function dailyQuestion() {
2144 | while (!id("home_bottom_tab_button_work").exists());//等待加载出主页
2145 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
2146 | sleep(2000);
2147 | text("我的").click();
2148 | if (!textContains("我要答题").exists()) {
2149 | sleep(1000);
2150 | click("我要答题");
2151 | }else {
2152 | (!text("我要答题").exists());
2153 | sleep(1000);
2154 | text("我要答题").findOne().parent().click();
2155 | }
2156 | while (!text("每日答题").exists());
2157 | sleep(1000);
2158 | text("每日答题").click();
2159 | console.log("开始每日答题")
2160 | sleep(2000);
2161 | let dlNum = 0;//每日答题轮数
2162 | while (true) {
2163 | dailyQuestionLoop();
2164 | /*dailyQuiz();*/
2165 | if (text("再来一组").exists()) {
2166 | sleep(2000);
2167 | dlNum++;
2168 | if (!text("领取奖励已达今日上限").exists()) {
2169 | text("再来一组").click();
2170 | console.warn("第" + (dlNum + 1).toString() + "轮答题:");
2171 | sleep(1000);
2172 | }else {
2173 | console.log("每日答题结束!返回主页!")
2174 | text("返回").click();sleep(500);
2175 | back();sleep(1000);
2176 | back();sleep(1000);
2177 | break;
2178 | }
2179 | }
2180 | }
2181 | }
2182 |
2183 |
2184 | /**
2185 | * @description: 每周答题
2186 | * @param: null
2187 | * @return: null
2188 | */
2189 | function weeklyQuestion() {
2190 | var dw = device.width;
2191 | var dh = device.height;
2192 | text("我的").click();
2193 | if (!textContains("我要答题").exists()) {
2194 | sleep(1000);
2195 | click("我要答题");
2196 | }else {
2197 | (!text("我要答题").exists());
2198 | sleep(1000);
2199 | text("我要答题").findOne().parent().click();
2200 | }
2201 | while (!text("每周答题").exists());
2202 | sleep(1000);
2203 | text("每周答题").click();
2204 | console.log("开始每周答题")
2205 | let i = 0;//参考订阅的翻页,只进行一次点击
2206 | while (i < 1) {
2207 | if (text("未作答").exists()) {
2208 | text("未作答").click();
2209 | i++;
2210 | }else if (text("您已经看到了我的底线").exists()) {
2211 | console.log("没有可作答的每周答题了,退出!!!")
2212 | back();sleep(1000);
2213 | back();sleep(1000);
2214 | back();sleep(1000);
2215 | return;
2216 | }else {
2217 | sleep(1000);
2218 | swipe(dw/3*2, dh/6*5, dw/3*2, dh/6, 500);//往下翻(纵坐标从5/6处滑到1/6处)
2219 | console.log("滑动查找未作答的每周答题")
2220 | }
2221 | }
2222 | ////翻页点击每周作答
2223 |
2224 | let dlNum = 0;//每日答题轮数
2225 | while (true) {
2226 | sleep(1000)
2227 | while (!(textStartsWith("填空题").exists() || textStartsWith("多选题").exists() || textStartsWith("单选题").exists())) {
2228 | console.error("没有找到题目!请检查是否进入答题界面!");
2229 | sleep(2000);
2230 | }
2231 | dailyQuestionLoop();
2232 | if (text("再练一次").exists()) {
2233 | console.log("每周答题结束,返回!")
2234 | text("返回").click();sleep(2000);
2235 | back();sleep(1000);
2236 | back();sleep(1000);
2237 | while (!textContains("我要答题").exists()) {
2238 | back();sleep(1000);
2239 | }
2240 | break;
2241 | }else if (text("查看解析").exists()) {
2242 | console.log("每周答题结束!")
2243 | back();sleep(500);
2244 | back();sleep(500);
2245 | break;
2246 | }else if (text("再来一组").exists()) {
2247 | sleep(2000);
2248 | dlNum++;
2249 | if (!text("领取奖励已达今日上限").exists()) {
2250 | text("再来一组").click();
2251 | console.warn("第" + (dlNum + 1).toString() + "轮答题:");
2252 | sleep(1000);
2253 | }
2254 | else {
2255 | console.log("每周答题结束,返回!")
2256 | text("返回").click();sleep(2000);
2257 | while (!textContains("我要答题").exists()) {
2258 | console.log("专项答题结束,返回!")
2259 | back();sleep(1000);
2260 | }
2261 | back();sleep(1000);
2262 | break;
2263 | }
2264 | }
2265 | }
2266 | //回退返回主页
2267 | while (!id("home_bottom_tab_button_work").exists()) {
2268 | back();
2269 | sleep(500);
2270 | }
2271 | }
2272 |
2273 | /**
2274 | * @description: 专项答题
2275 | * @param: null
2276 | * @return: null
2277 | */
2278 | function specialQuestion() {
2279 | var dw = device.width;
2280 | var dh = device.height;
2281 | text("我的").click();
2282 | if (!textContains("我要答题").exists()) {
2283 | sleep(1000);
2284 | click("我要答题");
2285 | }else {
2286 | (!text("我要答题").exists());
2287 | sleep(1000);
2288 | text("我要答题").findOne().parent().click();
2289 | }
2290 | /*while (!textContains("我要答题").exists());
2291 | sleep(1000);
2292 | click("我要答题");*/
2293 | while (!text("专项答题").exists());
2294 | sleep(1000);
2295 | text("专项答题").click();
2296 | console.log("开始专项答题")
2297 | sleep(2000);
2298 | /*
2299 | if(text("继续答题").exists())
2300 | {
2301 | text("继续答题").click();
2302 | }else{
2303 | text("开始答题").click();
2304 | }
2305 | */
2306 |
2307 | //翻页点击专项答题
2308 | let i = 0;
2309 | while (i < 1) {
2310 | if (text("继续答题").exists()) {
2311 | text("继续答题").click();
2312 | i++;
2313 | //console.log("1471")
2314 | }else if (text("开始答题").exists()) {
2315 | text("开始答题").click();
2316 | i++;
2317 | //console.log("1474")
2318 | }else if (text("您已经看到了我的底线").exists()) {
2319 | console.log("没有可作答的专项答题了,退出!!!")
2320 | back();sleep(1000);
2321 | back();sleep(1000);
2322 | back();sleep(1000);
2323 | return;
2324 | }else if (text("已过期").exists()) {
2325 | console.log("存在已过期的专项答题,无法作答,退出!!!")
2326 | back();
2327 | sleep(2000);
2328 | back();sleep(1000);
2329 | back();sleep(1000);
2330 | return;
2331 | }else {
2332 | sleep(1000);
2333 | swipe(dw/3*2, dh/6*5, dw/3*2, dh/6, 500);//往下翻(纵坐标从5/6处滑到1/6处)
2334 | sleep(1000);
2335 | console.log("滑动查找未作答的专项答题")
2336 | }
2337 | }
2338 | ////翻页点击专项答题
2339 |
2340 | let dlNum = 0;//每日答题轮数
2341 | while (true) {
2342 | sleep(1000)
2343 | while (!(textStartsWith("填空题").exists() || textStartsWith("多选题").exists() || textStartsWith("单选题").exists())) {
2344 | console.error("没有找到题目!请检查是否进入答题界面!");
2345 | sleep(2000);
2346 | }
2347 | dailyQuestionLoop();
2348 | if (text("再练一次").exists()) {
2349 | console.log("专项答题结束!")
2350 | text("返回").click();sleep(2000);
2351 | back();
2352 | break;
2353 | }else if (text("查看解析").exists()) {
2354 | console.log("专项答题结束,返回!")
2355 | back();sleep(500);
2356 | back();sleep(500);
2357 | back();sleep(1000);
2358 | while (!textContains("我要答题").exists()) {
2359 | back();sleep(1000);
2360 | }
2361 | break;
2362 | }else if (text("再来一组").exists()) {
2363 | sleep(2000);
2364 | dlNum++;
2365 | if (!text("领取奖励已达今日上限").exists()) {
2366 | text("再来一组").click();
2367 | console.warn("第" + (dlNum + 1).toString() + "轮答题:");
2368 | sleep(1000);
2369 | }
2370 | else {
2371 | console.log("专项答题结束,返回!")
2372 | sleep(2000);
2373 | while (!textContains("专项答题").exists()) {
2374 | console.log("专项答题结束,返回!")
2375 | back();sleep(1000);
2376 | }
2377 | back();sleep(1000);
2378 | break;
2379 | }
2380 | }
2381 | }
2382 | //回退返回主页
2383 | while (!id("home_bottom_tab_button_work").exists()) {
2384 | back();
2385 | sleep(500);
2386 | }
2387 | }
2388 |
2389 | /**
2390 | * @description: 在答题选项画✔,用于各项答题部分
2391 | * @param: x,y 坐标
2392 | * @return: null
2393 | */
2394 | // function drawfloaty(x, y) {
2395 | // //floaty.closeAll();
2396 | // var window = floaty.window(
2397 | //
2398 | //
2399 | //
2400 | // );
2401 | // window.setPosition(x, y - 45);
2402 | // return window;
2403 | // }
2404 |
2405 | /**
2406 | * @description: 每日每周专项答题循环
2407 | * @param: null
2408 | * @return: null
2409 | */
2410 | function dailyQuestionLoop() {
2411 | let blankArray = [];
2412 | let question = "";
2413 | let answer = "";
2414 | //填空题部分
2415 | if (textStartsWith("填空题").exists()) {
2416 | let questionArray = getFitbQuestion();
2417 | questionArray.forEach(item => {
2418 | if (item != null && item.charAt(0) == "|") {//是空格数
2419 | blankArray.push(item.substring(1));
2420 | }else question += item;//是题目段
2421 | });
2422 | question = question.replace(/\s/g, "");
2423 | console.log("题目:" + question);
2424 | let ansTiku = getAnswer(question, 'tikuNet');
2425 | answer = ansTiku.replace(/(^\s*)|(\s*$)/g, "");
2426 | if (answer == "") {//答案空,前面题库未找到答案,找提示
2427 | let tipsStr = getTipsStr();
2428 | answer = getAnswerFromTips(questionArray, tipsStr);
2429 | console.info("提示答案:" + answer);
2430 | setText(0, answer.substr(0, blankArray[0]));
2431 | if (blankArray.length > 1) {
2432 | for (let i = 1;i < blankArray.length;i++) {
2433 | setText(i, answer.substr(blankArray[i - 1], blankArray[i]));
2434 | }
2435 | }
2436 | }
2437 | else {//答案非空,题库中已找到答案
2438 | console.info("答案:" + answer);
2439 | setText(0, answer.substr(0, blankArray[0]));
2440 | if (blankArray.length > 1) {
2441 | for (let i = 1;i < blankArray.length;i++) {
2442 | setText(i, answer.substr(blankArray[i - 1], blankArray[i]));
2443 | }
2444 | }
2445 | }
2446 | }
2447 |
2448 | //选择题部分
2449 | else if (textStartsWith("多选题").exists() || textStartsWith("单选题").exists()) {
2450 | let questionArray = getChoiceQuestion();
2451 | questionArray.forEach(item => {
2452 | if (item != null && item.charAt(0) == "|") {//是空格数
2453 | blankArray.push(item.substring(1));
2454 | }else {//是题目段
2455 | question += item;
2456 | }
2457 | });
2458 | let options = [];//选项列表
2459 | if (className("ListView").exists()) {//选择题提取答案,为字形题 注音题准备
2460 | className("ListView").findOne().children().forEach(child => {
2461 | let answer_q = child.child(0).child(2).text();//此处child(2)为去除选项A.的选项内容,与争上游不同
2462 | options.push(answer_q);
2463 | });
2464 | }else {
2465 | console.error("答案获取失败!");
2466 | return;
2467 | }
2468 | question = question.replace(/\s/g, "");
2469 | if (question == ZiXingTi.replace(/\s/g, "") || question == DuYinTi.replace(/\s/g, "") || question == ErShiSiShi.replace(/\s/g, "")) {
2470 | question = question + options[0];//字形题 读音题 在题目后面添加第一选项
2471 | }
2472 | console.log("题目:" + question);
2473 | var ansTiku = getAnswer(question, 'tikuNet');
2474 | answer = ansTiku.replace(/(^\s*)|(\s*$)/g, "");
2475 | if (answer == "") {
2476 | var tipsStr = getTipsStr();
2477 | answer = clickByTips(tipsStr);
2478 | console.info("提示中的答案:" + answer);
2479 | if (text("单选题").exists()){//仅单选题更新题库,多选题不更新进题库
2480 | }
2481 | }else {
2482 | console.info("答案:" + ansTiku);
2483 | sleep(random(0.5, 1)*500);//随机延时0.25-0.5秒
2484 | clickByAnswer(answer);
2485 | }
2486 | }
2487 | sleep(random(0.5, 1)*1000);//随机延时0.25-0.5秒
2488 | //下一道题
2489 | while(text("确定").exists()||text("下一题").exists()||text("完成").exists())
2490 | {
2491 | if(textContains("正确答案:").exists()){ //错题更新答案,下次就正确了
2492 | let obj = textContains("正确答案:").findOne();
2493 | let tipanswer = obj.text();
2494 | let answer = tipanswer.slice(tipanswer.lastIndexOf(" ")+1,tipanswer.length);
2495 | checkAndUpdate(question, ansTiku, answer);
2496 | }
2497 | if (text("确定").exists()) {//每日每周答题
2498 | text("确定").click();
2499 | sleep(random(0.5, 1)*1000);//随机延时0.25-0.5秒
2500 | }
2501 | if (text("下一题").exists()) {//专项答题
2502 | text("下一题").click();
2503 | sleep(random(0.5, 1)*1000);//随机延时0.25-0.5秒
2504 | }
2505 | if (text("完成").exists()) {//专项答题最后一题
2506 | text("完成").click();
2507 | sleep(random(0.5, 1)*1000);//随机延时0.25-0.5秒
2508 | }
2509 | }
2510 | console.log("---------------------------");
2511 | sleep(2000);
2512 | }
2513 |
2514 |
2515 | /**
2516 | * @description: 获取填空题题目数组
2517 | * @param: null
2518 | * @return: questionArray
2519 | */
2520 | function getFitbQuestion() {
2521 | var questionCollections = className("EditText").findOnce().parent().parent();
2522 | var questionArray = [];
2523 | var findBlank = false;
2524 | var blankCount = 0;
2525 | var blankNumStr = "";
2526 | var i = 0;
2527 | questionCollections.children().forEach(item => {
2528 | if (item.className() != "android.widget.EditText") {
2529 | if (item.text() != "") {//题目段
2530 | if (findBlank) {
2531 | blankNumStr = "|" + blankCount.toString();
2532 | questionArray.push(blankNumStr);
2533 | findBlank = false;
2534 | }
2535 | questionArray.push(item.text());
2536 | }else {
2537 | findBlank = true;
2538 | /*blankCount += 1;*/
2539 | blankCount = (className("EditText").findOnce(i).parent().childCount() -1);
2540 | i++;
2541 | }
2542 | }
2543 | });
2544 | return questionArray;
2545 | }
2546 |
2547 |
2548 | /**
2549 | * @description: 获取选择题题目数组
2550 | * @param: null
2551 | * @return: questionArray
2552 | */
2553 | function getChoiceQuestion() {
2554 | var questionCollections = className("ListView").findOnce().parent().child(1);
2555 | var questionArray = [];
2556 | questionArray.push(questionCollections.text());
2557 | return questionArray;
2558 | }
2559 |
2560 |
2561 | /**
2562 | * @description: 获取提示字符串
2563 | * @param: null
2564 | * @return: tipsStr
2565 | */
2566 | function getTipsStr() {
2567 | var dw = device.width;
2568 | var dh = device.height;
2569 | var tipsStr = "";
2570 | while (tipsStr == "") {
2571 | if (text("查看提示").exists()) {
2572 | var seeTips = text("查看提示").findOnce();
2573 | seeTips.click();
2574 | sleep(1000);
2575 | click(dw * 0.5, dh * 0.41);
2576 | sleep(1000);
2577 | click(dw * 0.5, dh * 0.35);
2578 | }else {
2579 | console.error("未找到查看提示");
2580 | }
2581 | if (text("提示").exists()) {
2582 | var tipsLine = text("提示").findOnce().parent();
2583 | //获取提示内容
2584 | var tipsView = tipsLine.parent().child(1).child(0);
2585 | tipsStr = tipsView.text();
2586 | //关闭提示
2587 | tipsLine.child(1).click();
2588 | break;
2589 | }
2590 | sleep(1000);
2591 | }
2592 | return tipsStr;
2593 | }
2594 |
2595 |
2596 | /**
2597 | * @description: 从提示中获取填空题答案
2598 | * @param: questionArray, tipsStr
2599 | * @return: ansTips
2600 | */
2601 | function getAnswerFromTips(questionArray, tipsStr) {
2602 | let ansTips = "";
2603 | if(tipsStr == "请观看视频") return "--------";
2604 | for (let i = 1;i < questionArray.length -1;i++) {
2605 | if (questionArray[i].charAt(0) == "|") {
2606 | let blankLen = questionArray[i].substring(1);
2607 | let indexKey = tipsStr.indexOf(questionArray[i + 1]);
2608 | let ansFind = tipsStr.substr(indexKey - blankLen, blankLen);
2609 | /*ansTips += ansFind;*/
2610 | ansTips = ansTips.concat(ansFind);
2611 | }
2612 | }
2613 | return ansTips;
2614 | }
2615 |
2616 | /**
2617 | * @description: 根据提示点击选择题选项
2618 | * @param: tipsStr
2619 | * @return: clickStr
2620 | */
2621 | function clickByTips(tipsStr) {
2622 | var clickStr = "";
2623 | var isFind = false;
2624 | if (className("ListView").exists()) {
2625 | var listArray = className("ListView").findOne().children();
2626 | listArray.forEach(item => {
2627 | var ansStr = item.child(0).child(2).text();
2628 | if (tipsStr.indexOf(ansStr) >= 0) {
2629 | item.child(0).click();
2630 | clickStr += item.child(0).child(1).text().charAt(0);
2631 | isFind = true;
2632 | }
2633 | });
2634 | if (!isFind) {//没有找到 点击第一个
2635 | listArray[0].child(0).click();
2636 | clickStr += listArray[0].child(0).child(1).text().charAt(0);
2637 | }
2638 | }
2639 | return clickStr;
2640 | }
2641 |
2642 |
2643 | /**
2644 | * @description: 根据答案点击选择题选项
2645 | * @param: answer
2646 | * @return: null
2647 | */
2648 | function clickByAnswer(answer) {
2649 | if (className("ListView").exists()) {
2650 | var listArray = className("ListView").findOnce().children();
2651 | listArray.forEach(item => {
2652 | var listIndexStr = item.child(0).child(1).text().charAt(0);
2653 | //单选答案为非ABCD
2654 | var listDescStr = item.child(0).child(2).text();
2655 | if (answer.indexOf(listIndexStr) >= 0 || answer == listDescStr) {
2656 | item.child(0).click();
2657 | }
2658 | });
2659 | }
2660 | }
2661 |
2662 | /**
2663 | * @description: 检查答案是否正确,并更新数据库
2664 | * @param: question, ansTiku, answer
2665 | * @return: null
2666 | */
2667 | function checkAndUpdate(question, ansTiku, answer) {
2668 | console.info("正确答案是:" + answer);
2669 | let db = SQLiteDatabase.openOrCreateDatabase(files.path("tiku.db"),null);
2670 | let sql ="SELECT * FROM tikuNet WHERE question = '" + question + "' AND answer = '" + answer + "'";//数据库数据存在指令
2671 | let cursor = db.rawQuery(sql, null);
2672 | let res = cursor.moveToFirst();
2673 | cursor.close();
2674 |
2675 | if(res == false ){
2676 | log("题库不存在,更新题库")
2677 | sql ="UPDATE tikuNet SET answer='" + answer + "' WHERE question LIKE '" + question + "'";//更新题库答案
2678 | if (ansTiku == "") {//题库为空则插入正确答案
2679 | sql = "INSERT INTO tikuNet (question, answer) VALUES ('" + question + "', '" + answer + "')";
2680 | };
2681 | db.execSQL(sql);
2682 | console.info("更新题库答案...");
2683 | }
2684 | else console.info("题库存在,不用更新");
2685 |
2686 | }
2687 |
2688 | function main() {
2689 | auto.waitFor();//等待获取无障碍辅助权限
2690 | start_app();//启动app
2691 | var start = new Date().getTime();//程序开始时间
2692 | console.log("开始工作");
2693 | if (customize_flag == true) {
2694 | //自定义学习,各项目执行顺序可换
2695 | localChannel1();//本地频道
2696 | dailyQuestion();//每日答题
2697 | if (zxzd == 1){
2698 | weeklyQuestion();//每周答题
2699 | specialQuestion();//专项答题
2700 | }
2701 | challengeQuestion();//挑战答题
2702 | zsyQuestion();//四人赛
2703 | SRQuestion();//双人对战
2704 | if (aZX == 1){
2705 | articleStudy1();//学习文章脚本1,包含点赞、分享和评论
2706 | }
2707 | else{
2708 | articleStudy2();//学习文章脚本2,包含点赞、分享和评论
2709 | }
2710 | videoStudy_bailing();//看视频
2711 | }
2712 | else
2713 | {
2714 | getScores();//获取积分
2715 |
2716 | while (myScores['挑战答题'] != 6 || myScores['每日答题'] != 5 || myScores['视听学习'] != 6 || myScores['我要选读文章'] != 12)
2717 | {
2718 | if (myScores['本地频道'] != 1) localChannel1();//本地频道
2719 | if (myScores['每日答题'] != 5) dailyQuestion();//每日答题
2720 | if (zxzd == 1){
2721 | if (myScores['每周答题'] < 1) weeklyQuestion();//每周答题
2722 | if (myScores['专项答题'] < 1) specialQuestion();//专项答题
2723 | }
2724 | if (myScores['挑战答题'] != 6) challengeQuestion();//挑战答题
2725 | if (myScores["四人赛"] < 2) zsyQuestion();//四人赛
2726 | if (myScores["双人对战"] < 1) SRQuestion();//双人对战
2727 | if (myScores['我要选读文章'] != 12)
2728 | if (aZX == 1){
2729 | articleStudy1();//学习文章脚本1,包含点赞、分享和评论
2730 | }
2731 | else{
2732 | articleStudy2();//学习文章脚本2,包含点赞、分享和评论
2733 | }
2734 | if (myScores['视听学习'] != 6) videoStudy_bailing();//看小视频
2735 |
2736 | getScores();//再次获取积分,核对文章和视听时长,补学
2737 | continue;//break结束当前循环,continue继续执行当前循环
2738 | }
2739 | if (myScores['视听学习时长'] != 6){
2740 | videoStudy_bailing();//看小视频
2741 | listenToRadio();//听电台广播补视听时长
2742 | }
2743 | }
2744 |
2745 | var end = new Date().getTime();
2746 | console.log("运行结束,共耗时" + (parseInt(end - start)) / 1000 + "秒");
2747 | stop_app();
2748 | }
2749 |
2750 |
2751 | /**
2752 | * @description: 启动app
2753 | * @param: null
2754 | * @return: null
2755 | */
2756 | function start_app() {
2757 | console.setPosition(0, dh / 2);//部分华为手机console有bug请注释本行
2758 | console.show();//部分华为手机console有bug请注释本行
2759 | console.clear();//清理以前日志
2760 | console.log("启动学习强国");
2761 | if (!launchApp("学习强国")){//启动学习强国app
2762 | console.error("找不到学习强国App!");
2763 | return;
2764 | }
2765 |
2766 | console.log("延时5秒等待APP加载");
2767 | sleep(5000);//如果已清理强国app后台,默认打开主页;如果未清理后台,3秒应该可以拉起强国app
2768 | if(!id("home_bottom_tab_button_work").exists())
2769 | {
2770 | console.log("在延时5秒等待APP加载");
2771 | sleep(5000);//如果已清理强国app后台,默认打开主页;如果未清理后台,3秒应该可以拉起强国app
2772 | }
2773 | while (!id("home_bottom_tab_button_work").exists()){//返回到主页出现
2774 | if(text("退出").exists()) click("退出");
2775 | back();
2776 | sleep(1000);
2777 | };
2778 | while (!id("home_bottom_tab_button_work").exists()) {//20201001 学习按钮文字属性由"学习"改为 "工作",以下所有点击学习按钮加载主页均同步修改
2779 | id("home_bottom_tab_button_work").findOne().click();//点击主页正下方的"学习"按钮
2780 | console.log("等待加载出主页");
2781 | sleep(1000);
2782 | continue;/*break;exists();back();*/
2783 | }
2784 | sleep(1000);
2785 | }
2786 |
2787 | /**
2788 | * @description: 结束运行
2789 | * @param: null
2790 | * @return: null
2791 | */
2792 |
2793 | function stop_app(){
2794 | console.log("辅助程序结束中")
2795 | db.close();//安全关闭数据库
2796 | console.hide();
2797 | threads.shutDownAll();
2798 | engines.stopAll();
2799 | toast("停止运行!")
2800 | console.hide();
2801 | ui.finish();
2802 | exit();
2803 | }
2804 |
2805 |
--------------------------------------------------------------------------------