autojs刷网课之一、刷视频篇
本程序还有许多需要改进的地方,希望路过的各位大佬不吝赐教,感谢!
背景:网课,2021春,形式与政策Ⅱ,知到app
- 功能:
- 定时打开app
- 跳过广告
- 播放形式与政策
- 1.5倍速
- 自动关闭弹题
- 连播三个视频后自动退出
准备:vivo手机(Android 7以上),autojs 4.1.2,vs code
个人背景:本人大三,在学习大二的计算机课程,只学过c和c++(所以用其他语言肯定有许多不规范的地方,感谢雅正!)
最近接触了autojs(javaScript),虽然没学过javaScript,但是庆幸的是基本可以用c/c++的知识写js。
相关说明
- 本学期课程设学习习惯分 ,需要有五天学习时间(看视频,不包括见面课)超过25min,一定不要一下刷完!
- 本人水平十分有限,都是基于兴趣进行相关学习,所以程序不会十分完善,只达到自用的程度 ,使用博客记录过程,一方面反思进步,另一方面希望能和你们互惠互助,共同进步。
- 本程序分为两部分,此篇为第一部分,实现了刷视频的功能,第二部分为自动答题篇;
- 功能流程 :使用autojs自带的定时(时灵时不灵),息屏时亮屏并解锁(上滑,6位数字密码),打开app,跳过广告,点击学习,点击形式与政策,点击继续学习,点击继续播放,放大,1.25x,1.5x,循环检测弹题,有题就选择A并关闭(未选就不能关闭),循环检测是否是下一个视频(自动播放下个视频的时候下边那个控制栏会出现,倍速会变为1.0x,检测到1.0x就点击两下变为1.5x,所以放大4次就表示看到第四个视频了(三个视频是为了凑够25min),就自动退出app;
- 关于第二部分的自动答题,其实章节课后题总共就8章×5=40道题,网上也很容易查到答案,但是本人是为了锻炼对autojs的使用,同时为另一个答题做准备,所以才写的,第二部分涉及了三个方面 1.使用python爬取答案,写入文档制作题库 2.使用python将txt文件的问题和答案变为json键值对格式 3.获取页面文字,匹配键值,获取答案,自动答题,有兴趣的可以继续关注;
- 之后应该会写爬网页,企业微信每日上报,定时抢购,stm32,ss答题等,时间不定,先挖个坑;
- 新手上路,请多 点赞 收藏 关注 ,十分感谢 。
1.息屏状态下亮屏
while (!device.isScreenOn()) {
device.wakeUp();
sleep(500)
swipe(700, 1900, 700, 450, 300);//上滑
sleep(400);
//解锁 密码123456
desc(1).findOne().click();
desc(2).findOne().click();
desc(3).findOne().click();
desc(4).findOne().click();
desc(5).findOne().click();
desc(6).findOne().click();
sleep(400);
}
2.设置悬浮窗
var w = floaty.rawWindow(
<frame gravity="center" bg="#CC999999">
<text padding="5 0 5 0" w="auto" h="auto" id="text" textColor='#FFFFFF'></text>
</frame>
);
w.setPosition(150, 5);
w.setTouchable(false);
ui.run(function(){
w.text.setText("开始刷课");
});
3.打开app,跳过广告,点击相关课程
while(currentPackage().search(/wisdomtree/i)==-1){ //如果没有找到任何匹配的子串,则返回 -1。
launchApp("知到");
ui.run(function(){
w.text.setText("正在打开知到");
});
sleep(1000);
}
if(id('tv_skip').findOne().click()){
ui.run(function(){
w.text.setText('跳过广告');
});
sleep(500);
}
var widget = text("学习").findOne();
//获取其中心位置并点击
click(widget.bounds().centerX()+random(0, 10), widget.bounds().centerY()-40);
ui.run(function(){
w.text.setText('点击学习')
});
sleep(4000);
if(id('rl_credit_all_info').findOne().click()){
ui.run(function(){
w.text.setText('点击形式与政策');
});
sleep(2000);
}
id("continue_study_btn").findOne().click();
sleep(500);
click(600, 600);
ui.run(function(){
w.text.setText('继续播放');
});
sleep(1000);
var number = 0
device.setMusicVolume(device.getMusicMaxVolume() / 100 * number)
click(800, 800);sleep(500);
click(1000, 800);
ui.run(function(){
w.text.setText('放大');
});
4.弹题与倍速
/*思路:
问题一:弹题
一直检测,是否有题,有题就答
问题二:怎么调第二次倍速
1.间隔时间段后检测倍速
2.不调倍速
问题三:怎么判断三个视频播放完毕
第四次调倍速就退出脚本
*/
n=1;t=0;
while(true){
if(text('A').findOnce()) {
sleep(500)
click("A");
sleep(1000)
click("关闭")
sleep(1000)
toast('关闭'+ n +'个弹题');
n=n+1;
}
if(text('1.0x').findOnce()) {
click("1.0x")
t+=1;
sleep(500);
click("1.25x");sleep(500);
ui.run(function(){
w.text.setText('第'+ t +'个视频');
});
}
//if(t == 3) 。。。
}
5.结束视频
if(t == 4) {
if(id('ijk_layout_controller_cover_play_layout').findOnce().click()){
ui.run(function(){
w.text.setText('3个视频播放完毕,已暂停');
});
}
back()
sleep(500);
back()
sleep(500);
if(id('positiveButton').text("确定").findOnce()){
log('确定退出');
click("确定")
}
back()
sleep(500);
back()
sleep(500);
home()
exit()
}
总结
写东西果然很难啊,特别是码代码的习惯特别不好,导致整理的时候要花费很长时间,注释也懒得写了,感觉都是很简单的语句,看不懂就看功能流程哈,再看不懂就评论,我看到就会回复的。
全部代码在gitee,点这里跳转
坚持就是胜利!