基于auto.js 编写的《学习强国》刷积分脚本
- 只刷阅读文章、视听学习。
- 只是模拟点击,封号应该不会(理论上哈,被封别找我!)。
- 只限制android系统。
- 只限于学习与交流,只分享我的学习过程!有问题可以私聊我!
准备工作
- android 手机一台
- 或者电脑模拟器
- 安装 auto.js app
- 请看完全文或者请从后面看起!
使用教学
- 打开auto.js app 点击侧边栏开启无障碍服务和悬浮窗,(这个过程需要手机一些权限,具体自己体会,反正能打开就行)。如图

- 打开悬浮窗退出应用会有个小窗。如图

- 怎么导入脚本?这个问题困扰我挺久的!最终找到最简单的方法: 将编写好的脚本文件 用微信发给自己,要打开auto.js app, 在微信会话中长按刚发给自己的脚本选择用其他应用打开,会弹出导入脚本,给脚本命名,这样导入脚本就导入好了。

- 最后点击点击脚本运行!见证奇迹!
最后总结
- 本人只在荣耀10测试和网易MUMU 模拟器实践过!其他没试过。
“ui”; var form = { type: null, offset: 0, cishu: 6, time: 60, } ui.layout( <vertical padding=”20″> <text gravity=”center” textSize=”18sp” textColor=”red” textStyle=”bold”> 《学习强国》辅助</text> <vertical> <text text=”提示: 用mumu模拟器可以边刷边玩电脑!手机是不能放在后台执行脚本的!”/> <text text=”注意: 使用前先把学习强国关闭,记住要删除进程!因为缓存机制会导致出错!”/> <text text=”仅用于学习交流!要爱党爱国家哦!”/> <text text=””/> </vertical> <vertical> <text text=”任务类型 :”/> <radiogroup id=”sel”> <radio id=”readVideo” text=”阅读文章和视听学习”></radio> <radio id=”read” text=”阅读文章”></radio> <radio id=”video” text=”视听学习”></radio> </radiogroup> </vertical> <vertical> <text text=”每个任务列表先下滑次数:”/> <input id=”offset” w=”*” marginLeft=”12″ padding=”12″ gravity=”left” text=”0″ inputType=”number”/> </vertical> <vertical> <text text=”每个任务执行次数(次):”/> <input id=”cishu” w=”*” marginLeft=”12″ padding=”12″ gravity=”left” text=”6″ inputType=”number”/> </vertical> <vertical> <text text=”进入详情等待时间(s):会加上10s随机数”/> <input id=”time” w=”*” marginLeft=”12″ padding=”12″ gravity=”left” text=”180″ inputType=”number”/> </vertical> <button id=”ok” w=”*” text=”立即执行”/> <button id=”stop” w=”*” text=”停止所有”/> </vertical> ); ui.stop.click(function(){ threads.shutDownAll(); engines.stopAll(); }); //指定确定按钮点击时要执行的动作 ui.ok.click(function(){ //通过getText()获取输入的内容 form.offset = ui.offset.getText(); form.cishu = ui.cishu.getText(); form.time = ui.time.getText(); if(!form.type){ toast(“请选择任务”) return; } if(form.offset<0){ toast(“次数必须大于等于0”) return; } if(form.cishu<=0){ toast(“次数必须大于0”) return; } if(form.time<=0){ toast(“等待时间必须大于0”) return; } log(form); try { var curThreads = threads.start(function(){ //在新线程执行的代码 if(form.type ===’readVideo’){ let view = init(); // 初始化 readTast(view.readListView,form.cishu,form.time,form.offset); videoTast(view.videoListView,form.cishu,form.time,form.offset); } if(form.type ===’read’){ let view = init(); // 初始化 readTast(view.readListView,form.cishu,form.time,form.offset); } if(form.type ===’video’) { let view = init(); // 初始化 videoTast(view.videoListView,form.cishu,form.time,form.offset); } curThreads.interrupt(); toast(“任务执行完毕!”); exit() }); } catch (error) { log(error); threads.shutDownAll() toast(“出现异常,请关闭应用重新执行脚本!”); exit(); // 有异常退出,结束脚本 } }); ui.read.on(“check”,function(check){ if(check){ form.type= “read”; } }); ui.video.on(“check”,function(check){ if(check){ form.type= “video”; } }); ui.readVideo.on(“check”,function(check){ if(check){ form.type= “readVideo”; } }); // 初始化 function init() { app.launchApp(“学习强国”); waitForPackage(“cn.xuexi.android”); sleep(5000); // 获取要闻和视频推荐两个listView let viewData = getReadVideoListView(initListView()); console.log(viewData); if (!viewData.readListView || !viewData.videoListView) { toast(“初始化失败!请关掉强国app,并清除强国进程,再尝试!”); exit(); } toast(“初始化成功!”); return viewData; } // 初始化ListView function initListView() { // 经验:切换页面会有缓存ListView 会导致判断不准确,所以干脆直接先让他缓存下来在判断是哪个页面再执行 // 学习首页 className(“android.widget.FrameLayout”).id(“home_bottom_tab_button_work”).findOne().click(); sleep(1500); // 跳到要闻 className(“android.widget.TextView”).text(“要闻”).findOne().parent().click(); sleep(1500); // 跳到视频推荐 className(“android.widget.FrameLayout”).id(“home_bottom_tab_button_contact”).findOne().click(); sleep(1500); let ListViews = className(“android.widget.ListView”).scrollable(true).find(); return ListViews } // 获取要闻和第一频道ListView function getReadVideoListView(ListViews) { // 经过测试那种利用id 或者和层级的兼容性贼差,反正他默认会缓存这几个默认的顺序,还不如直接记录 let list = []; ListViews.forEach(function (listView) { if(listView.findOne(className(“android.widget.TextView”).textMatches(/(.*央.*|.*人民日报.*|.*新华.*|.*学习.*)/))){ // 到这个里正常来说会缓存3个listView list.push(listView) } }) if(list.length ===3 ){ const data = { readListView: list[1], videoListView: list[2] } return data } return null } // 跳转到第一频道 function jumpVideo() { className(“android.widget.FrameLayout”).id(“home_bottom_tab_button_contact”).findOne().click(); sleep(1500); toast(“切换到第一频道”); } // 跳转到要闻 function jumpRead() { className(“android.widget.FrameLayout”).id(“home_bottom_tab_button_work”).findOne().click(); sleep(1500); // 跳到要闻 toast(“切换到要闻”); className(“android.widget.TextView”).text(“要闻”).findOne().parent().click(); } // 阅读文章 function readTast(view,num,delay,offset) { jumpRead(); // 跳到阅读文章 var cishu = 0; for(var i = 0; i<offset;i++){ // 向下滑动 view.scrollForward(); sleep(2000); } while(cishu < num){ var isClick = false; sleep(3000); view.scrollForward();//向下翻 if(view.childCount()>2&&view.child(1)){ console.log(‘child:’+ view.child(1)); isClick= view.child(1).click(); if(isClick){ cishu = cishu+1; var random = Math.floor(Math.random() * 10) log(‘random:’+ random); var delayTime = Number(random) + Number(delay) toast(‘点击进入详情!剩余’+delayTime+ ‘s’); log(‘delayTime:’+ delayTime); for(var i =1 ; i<=delayTime; i++){ var lastTime = delayTime – i; var lastCishu = num – cishu; if(lastTime%5===0){ toast(“正在等待模拟阅读,”+ lastTime +”s,剩余”+ lastCishu+”次”); } sleep(1000); // 考虑华为手机默认30会休眠所以用29s if(lastTime <=0){ sleep(1000); toast(‘返回!’); back(); } } } } } } // 视听学习任务 function videoTast(view, num,delay,offset) { jumpVideo(); // 跳到阅读视频 var cishu = 0; for(var i = 0; i<offset;i++){ // 向下滑动 view.scrollForward(); sleep(2000); } while(cishu < num){ var isClick = false; sleep(3000); view.scrollForward();//向下翻 if(view.childCount()>2&&view.child(1)){ console.log(‘child:’+ view.child(1)); isClick= view.child(1).click(); if(isClick){ cishu = cishu+1; var random = Math.floor(Math.random() * 10) log(‘random:’+ random); var delayTime = Number(random) + Number(delay) toast(‘点击进入详情!剩余’+delayTime+ ‘s’); log(‘delayTime:’+ delayTime); for(var i =1 ; i<=delayTime; i++){ var lastTime = delayTime – i; var lastCishu = num – cishu; if(lastTime%5===0){ toast(“正在等待模拟阅读,”+ lastTime +”s,剩余”+ lastCishu+”次”); } sleep(1000); // 考虑华为手机默认30会休眠所以用29s if(lastTime <=0){ sleep(1000); toast(‘返回!’); back(); } } } } } }