好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 KhScript 于 2024-10-16 17:42 编辑
基于auto.js或autox.js的起点7.9.370.1396版本app日签脚本
理论上是兼容所有版本的起点app的,但代码是基于起点7.9.370.1396版本进行开发的。
首次使用请在录屏的情况下进行运行,这样有问题,可以评论区将录屏以附件或百度网盘链接的形式发出来,提问题标准格式:手机型号+系统类型及版本+起点app版本+录屏
关于帖子分享问题:
1,代码本身是开源的,支持任何人的二次创作,如果我的代码帮助了你,那我与有荣焉;但任何基于本代码的二次创作作品都禁止用于盈利(事实上我已经发现在“**脚本”,“C**N”等平台有人剽窃代码,没有任何删改且标明原则发布,其中在“**脚本”平台竟然还是收费的)
2,关于帖子分享问题,我理解大家乐于分享的心情,并且吾爱破解平台本身也是一个分享渠道,但请大家注意分享渠道(事实上我已经发现有人在起点书评区分享了,那么喜欢贴脸开大吗?)
3,就我个人而言,我希望每一个朋友都是靠自己找到本帖子的,而不是因为他人的分享得到的(我喜欢低调)
(也请不要老是更新,每次起点更新的东西你用的到吗?那就是产品经理为了让自己显的有作用加的乱七八糟东西罢了。在不影响日常使用的情况下,不建议更新起点,其他APP也一样,旧手机尤其适用这一规则)
PS:代码仅用于js代码学习、交流、讨论!
————————————————————————
起点脚本7.3更新
优化:再次优化解决,因网络波动或其他手机未知卡顿,产生的广告视频未加载成功而直接跳过,并弹出‘广告已经看完了,直接给你奖励吧’文字时,脚本陷入死循环的问题
新增:青少年模式弹窗,流量播放弹窗过滤
Bug阉割:因为抽奖页面的未知改动,现在抽奖功能已经不能用了,抽奖页面所有控件均不能获取到,所以暂时屏蔽该功能,直至我找到新的解决方法
版本前瞻:广告播放页面最近有部分朋友又变回旧版页面了,不过貌似之前的开发代码时做的兼容性预判生效了,所以暂时对该部分功能观察一段时间确认是否稳定,是否存在优化空间
关于版本号的问题,每次更新版本号不连续是因为我在优化代码时淘汰了中间测试版本,每个上线版本都是经过大约3天的稳定性试用才发布的
注:脚本每次更新都是对旧版兼容的,新旧的福利中心或者签到页都是兼容
————————————————————————
模块功能的启用是考虑三点产生的:
1,随着脚本的持续维护,脚本的代码量越来越大,已经在向屎山代码靠近,也不敢轻易的精简代码,怕产生新的bug
2,将新功能模块化,切割成一个个小脚本,这样便于朋友们可以选取自己想要的功能,自定义添加
3,我希望引入更多朋友帮我维护脚本,开发新功能供大家选择,以后如果有朋友发现本代码的功能已经不能满足你的时候,可以自己开发新功能,并发帖分享出来供大家使用(例如:大家都很想要,而我又因为精神洁癖很嫌弃的的“自动玩游戏领起点币功能”,期待有朋友可以帮忙开发,供大家使用)
相关的脚本,我会在本帖标明,给新开发的脚本引流,供大家选取。
模块脚本链接:
1,https://www.52pojie.cn/thread-1904200-1-1.html;起点激励碎片脚本1.1.2
2,https://www.52pojie.cn/thread-1911482-1-1.html;基于auto.js或autox.js的多账户起点自动签到脚本(支持玩游戏领起点币)
3,待添加……
————————————————————————
代码是一边学一边写的,大体功能都可以实现(每日视频福利,限时福利,签到,经验翻倍,概率得起点币,抽奖,章节卡碎片,开宝箱),但是有概率某个按键点击事件失效,至今没找到原因,如果你使用了我的代码。并且有这方面的代码基础,可以帮我维护一下,解决这个问题
运行代码前,需要给auto.js无障碍,悬浮窗权限,如果需要静音功能还需要授权修改系统设置权限,这里着重为小白强调一下:“修改系统设置权限”是仅次于root权限的,授权该权限几乎相当于授权控制手机所有功能,如果你的auto.js或autox.js来源并不正规,有被内置病毒概率,那么并不建议你授权该权限,请注释掉第10行,11行代码,每次使用前,先手动静音也挺好的,我衷心的不希望在“病毒救援区”与各位碰面。并且运行前最好先手动打开起点app将一些每日首次启动的意外弹窗点击掉,例如青少年模式,各种促销活动弹窗,之后关闭起点,运行auto.js
————————————————————————
起点脚本2.0更新
经过一段时间的测试,再一次优化了代码,进一步降低点击事件的失效问题。
另经过最近的测试,平板电脑不能使用该代码,因为楼主是使用图层来定位某些按键的,平板的图层与手机的不同会导致代码点击事件失效一大部分,目前不打算修复这个问题,等哪天闲下来再说吧。
————————————————————————
起点脚本3.0更新
优化+控件的点击,移除通过图层来获取控件的操作,通过坐标计算点击位置,好处是点击的位置更准确,坏处是脚本运行期间如果弹出意外弹窗(微信消息之类的横屏弹窗)会误点导致脚本运行出错。
运行脚本的手机如果太远古,会因为各种应用卡顿导致脚本运行出问题(例如打开某个页面反应过慢会一直点击,导致最后同一个页面打开很多个),暂不修复这个问题,优化这玩意好难,永远不知道旧手机会卡在哪一步……
————————————————————————
起点脚本4.0更新
新增:兼容两种版本的起点签到页,即,签到获取经验和签到获取章节卡碎片两种版本
注:周日章节卡碎片兑换的操作还是要自己来,因为我也不知道你要换哪一种章节卡,还是自己按照需求换吧
————————————————————————
起点脚本5.1更新
在原计划发布的5.0版本基础对观看视频的代码逻辑进行了优化,至于未发布的5.0已经被淘汰了,原因是我发现最近起点的看视频时长有增加的趋势,就是说原本绝大部分视频都是看小于等于15秒视频即可获取,但是最近出了一个所谓的“白泽装扮”,视频时长是观看随机的小于等于30秒才可以获取,这是一个信号,意味着后续视频福利的观看时长可能会增长(实际上有一次我在网络波动的情况下测试脚本,开宝箱的视频竟然是观看20秒才可以领取),所以我取消了原计划11月13号发布的脚本5.0,进行延期优化。另外星期二我老爸突然受伤了,我去医院照顾了几天,耽误了点时间今天才写好,而且由于时间匆忙,代码稳定性的测试还没进行就在今天匆匆发布了,大家有问题,多多提出(附截图,以及语言描述,最好是稳定复现的问题,比较好解决)
新增:兼容新版开宝箱福利中心,优化观看视频代码逻辑。
————————————————————————
起点脚本5.2.5更新
新增:兼容安卓14与鸿蒙,安卓13及以下设备。
优化:修复新版视频播放页面脚本失效的问题
————————————————————————
起点脚本5.2.6更新
优化:进一步优化5.2.5的稳定性(针对安卓14的优化;鸿蒙,安卓13及以下设备可不更新)
————————————————————————
起点脚本5.2.7更新
优化:针对高频问题2的优化,注意是优化,不是完全杜绝,只是在遇到该问题时,可以跑下去,不至于卡住。
————————————————————————
起点脚本5.2.8更新
新增:高频问题3的识别文字补充。
————————————————————————
起点脚本5.2.9更新
修复:修复安卓14系统,有概率卡在“观看视频0秒后,可领取奖励”界面的问题
优化:修改获取退出坐标的逻辑,增加稳定性
————————————————————————
起点脚本5.2.10更新
修复:修复鸿蒙,安卓13及以下系统,在“观看完视频”的界面运行异常,自动打开应用跳转的问题
————————————————————————
起点脚本6.0更新
新增:引入模块功能,可以单独启用依附于本脚本的模块脚本,用于添加自定义功能
————————————————————————
起点脚本6.1更新
新增:听书一分钟领取起点币功能
————————————————————————
起点脚本6.1.5更新
新增1:根据反馈,新增听书静音功能,但该功能需要授权“修改系统设置权限”;这里着重为小白强调一下:“修改系统设置权限”是仅次于root权限的,授权该权限几乎相当于授权控制手机所有功能,如果你的auto.js或autox.js来源并不正规,有被内置病毒概率,那么并不建议你授权该权限,请注释掉第10行,11行代码,每次使用前,先手动静音也挺好的,我衷心的不希望在“病毒救援区”与各位碰面。
新增2:增加听书防黑屏功能
优化:起点7.9.336.1206版安卓13及以下系统已经可以稳定获取看视频控件了,所以和安卓14的看视频逻辑进行了合并,稳定性提高,并彻底解决高频问题2,3,以后不需要根据系统类型来区别处理了,所有系统采用一套看视频逻辑。
修复:解决偶尔跳过每日视频观看的bug
预开发:针对新出现的听书广告(评论区置顶),做了预开发,但因为我始终没有遇到过该广告,所以该功能仅在理论上是可以使用的,如果后续有问题,请及时反馈,我来修改。
————————————————————————
起点脚本6.1.6更新
修复1:修复因签到页布局改变导致的抽奖看视频退出异常的问题
修复2:修复因第三方广告跳过软件误触,导致视频暂停播放的问题(例如“李跳跳”,“GKD”在视频广告页面因识别到了“跳过广告”文字而产生误触,造成的视频停止播放)
优化:以后每次更新会将代码文档打包,以附件的形式放在本帖最后,这样没有电脑的小伙伴只需下载附件再解压,最后长按解压后的文档,根据手机的弹窗,选择auto.js或autox.j自带的“导入脚本文件”功能直接使用(便捷是有代价的,需要1吾爱币)
————————————————————————
起点脚本6.1.7更新
修复:解决偶尔获取不到退出坐标脚本卡死的问题
————————————————————————
起点脚本6.1.8更新
修复:修复因听书界面改版导致的听书异常问题(无法听书或听完书退不出去)
————————————————————————
起点脚本6.1.9更新
修复:修复因听书界面改版导致的听书异常问题(无法听书或听完书退不出去);这次更新就是在回退至6.1.7版本的基础上添加了一点容错机制,一定程度上避免再次出现界面改版导致的问题,理论上直接使用6.1.7版本也是可以的。
————————————————————————
起点脚本6.1.9.1更新
修复:解决异常退出福利中心的问题
————————————————————————
起点脚本6.1.10.2更新
修复:解决因网络波动或其他手机未知卡顿,产生的广告视频未加载成功而直接跳过,并弹出‘广告已经看完了,直接给你奖励吧’文字时,脚本陷入死循环的问题
————————————————————————
高频问题1:脚本提示“脚本运行异常,请将起点、auto.js后台清理后尝试重新运行”
原因是因为网络延迟,手机卡顿,或没有定位到“我”的控件坐标,导致脚本在15秒内未能进入福利中心,前两点无法处理,第三点有三种处理方式,我在代码中提供了三种点击“我”的方案,其中方案三仅对部分机型有效,遇到了可以优先尝试方案三。
分别是:第39-44行代码、第45行代码。
如果方案一二都不行,请对方案二进行更改,将第44行代码的150,改成0-300以内的数字,不同尺寸,分辨率的手机更改的数字不同,请酌情更改。
————————————————————
附最新代码,代码运行出现问题请评论区贴图,楼主只有3个账号,两台手机(荣耀magic5pro,荣耀30pro)可以测试脚本,测试样本数量远远不够,维护ing……
console.show()
auto.waitFor()
console.setTitle("7.3");
console.setPosition(0, device.height / 1.6)
console.setSize(device.width / 2, device.width / 2)
if (auto.service == null) {
log("请先开启无障碍服务!");
} else {
log("无障碍服务已开启");
log("开启静音");
device.setMusicVolume(0)
home()
sleep(1000);
launch("com.qidian.QDReader");
waitForPackage("com.qidian.QDReader");
do {
sleep(1000);
if (text("书架").exists() && text("精选").exists() && text("发现").exists() && text("我").exists()) {
break;
} else {
log("缓冲……")
}
}
while (!(text("书架").exists() && text("精选").exists() && text("发现").exists() && text("我").exists()))
sleep(3000);
back()
if (text("书架").exists() && text("精选").exists() && text("发现").exists() && text("我").exists()) {
log("起点已启动成功");
sleep(1000);
var thread = threads.start(
function time() {
//计时
let shuzi = 0;
do {
sleep(1000);
shuzi++
}
while (shuzi < 15);
log("脚本运行异常,请将起点、auto.js后台清理后尝试重新运行");
engines.stopAllAndToast()
}
);
swipe(device.width - 50, device.height / 4, device.width - 50, device.height / 2, 500)
sleep(3000);
//方案一
let uc = id("viewPager").className("androidx.viewpager.widget.ViewPager").scrollable(true).findOne().bounds()
var x1 = uc.right;
var y1 = uc.bottom;
click((x1 - 10), (y1 + 10))
//方案二
// click(device.width - 150, device.height - 150)
//方案三
// id("view_tab_title_title").className("android.widget.TextView").text("我").findOne().parent().click()
sleep(3000);
if (text("福利中心").exists()) {
log("成功打开“我”");
thread.interrupt()
log("关闭纠错线程");
click("福利中心", 0)
do {
log("缓冲中……");
sleep(1000);
}
while (!(className("android.view.View").text("每日视频福利").exists() || text("每日福利").exists()));
log("已进入福利中心");
log("———————");
sleep(5000);
if (textContains("立即开启").exists()) {
click("立即开启", 0)
sleep(3000);
if (textContains("恭喜你获得").exists()) {
back()
sleep(3000);
}
click("福利中心", 0)
do {
log("缓冲中……");
sleep(1000);
}
while (!(className("android.view.View").text("每日视频福利").exists() || text("每日福利").exists()));
log("重新进入福利中心");
log("———————");
}
//每日视频
if (textContains("每日福利").exists()) {
do {
log("每日视频")
sleep(1000);
if (textContains("看视频领福利").exists()) {
className("android.widget.Button").textContains("看视频领福利").click();
video_look()
sleep(2000);
if (textContains("我知道了").exists()) {
click("我知道了", 0)
}
sleep(3000);
} else {
break;
}
} while (text("看视频领福利").exists());
if (textContains("恭喜你获得").exists()) {
back()
sleep(3000);
}
if (textContains("看视频开宝箱").exists()) {
log("开宝箱");
textContains("看视频开宝箱").click()
video_look()
sleep(2000);
if (textContains("我知道了").exists()) {
click("我知道了", 0)
}
log("宝箱开完了");
} else {
log("宝箱开完了");
}
} else {
do {
log("每日视频")
sleep(1000);
if (text("明天再来吧").exists()) {
break;
} else {
var video_sum = className("android.widget.Button").findOne().text()
log(video_sum)
var video_loop = video_sum.charAt(2);
if (video_loop == "再") {
break;
} else {
className("android.widget.Button").textContains("看第").click();
video_look()
sleep(2000);
if (textContains("我知道了").exists()) {
click("我知道了", 0)
}
sleep(3000);
}
}
}
while (video_loop != "再" || video_loop <= 8);
if (textContains("恭喜你获得").exists()) {
back()
sleep(3000);
}
}
sleep(3000);
log("每日视频福利已刷完,开始刷限时任务");
log("———————");
//限时任务
let k = 0
do {
log("限时任务")
if (text("看视频").exists()) {
text("看视频").findOne().click()
} else {
break;
}
sleep(3000);
if (text("可从这里回到福利页哦").exists()) {
click("我知道了", 0)
}
video_look()
sleep(3000);
if (text("我知道了").exists()) {
click("我知道了", 0)
k++
sleep(3000);
}
console.log("已完成限时任务", k);
if (k > 2) {
break;
}
}
while (text("看视频").exists());
log("听书");
if (text("当日听书1分钟").exists()) {
let ts1 = text("当日听书1分钟").findOne().bounds()
let x1 = ts1.right;
let y1 = ts1.bottom;
ts1.right = Number(ts1.right) + Number(5)
click(x1, y1)
sleep(3000);
if (text("听原创小说").exists()) {
let abscissa = device.width;
let ordinate = device.height;
let abscissa_new = abscissa / 2
let ordinate_new = ordinate / 2
click(abscissa_new, ordinate_new)
sleep(3000);
}
if (text("免费听").exists() || text("定时").exists() || text("加书架").exists() || text("目录").exists()) {
sleep(3000);
let i = 0;
do {
i++
sleep(1000);
console.log("已收听", i + "秒")
if (!(i % 10)) {
console.log("防休眠点击")
click(1, 1)
}
}
while (i < 70);
back()
sleep(3000);
if (textContains("加入书架").exists()) {
click("取消", 0)
}
sleep(3000);
if (text("听原创小说").exists()) {
do {
log("缓冲中……");
sleep(1000);
}
while (!text("听原创小说").exists());
back()
}
do {
log("缓冲中……");
sleep(1000);
}
while (!text("福利中心").exists());
back()
do {
log("缓冲中……");
sleep(1000);
}
while (!text("我的账户").exists());
click("福利中心", 0)
do {
log("缓冲中……");
sleep(1000);
}
while (!(className("android.view.View").text("每日视频福利").exists() || text("每日福利").exists()));
sleep(1000);
if (id("ivClose").exists()) {
id("ivClose").findOne().click()
} else {
console.log("未知原因,找不到关闭按钮,请手动关闭")
}
sleep(1000);
if (text("领奖励").exists()) {
click("领奖励", 0)
sleep(2000);
if (text("我知道了").exists()) {
click("我知道了", 0)
sleep(1000);
}
}
log("听书完成");
} else {
console.log("听书活动已完成")
}
} else {
console.log("听书活动已结束")
}
log("限时任务,已完成,开始签到");
log("———————");
//签到
back()
sleep(1000);
back()
sleep(1000);
// swipe(1200, 1679, 1200, 2480, 500)
sleep(1000);
if (text("签到").exists()) {
click("签到", 0)
sleep(2000);
back()
log("已点击签到");
} else {
log("已签到过了");
}
sleep(3000);
log("———————");
log("刷今日福利");
log("———————");
//今日福利
if (text("今日福利").exists() || text("去抽奖").exists() || text("签到福利").exists()) {
if (text("去抽奖").exists()) {
click("去抽奖", 0)
sleep(3000);
if (textContains("剩余") && ((className("android.view.View").text("抽 奖").exists()) || className("android.view.View").text("看视频抽奖喜+1").exists())) {
back()
sleep(1000);
click("今日福利", 0)
}
} else if (text("今日福利").exists()) {
click("今日福利", 0)
} else if (text("签到福利").exists()) {
click("签到福利", 0)
}
sleep(3000);
if (textContains("当前连续签到").exists()) {
let qiandao = textContains("当前连续签到").findOne().text()
log(qiandao)
//连签礼包
log("连签礼包活动")
if (textContains("连签礼包").exists()) {
sleep(2000);
textContains("连签礼包").findOne().click()
sleep(2000);
back()
sleep(2000);
log("连签礼包已领取")
} else {
log("连签礼包活动结束")
}
log("———————");
if (textContains("章节卡碎片").exists()) {
log("签到领章节卡活动");
} else {
log("签到翻倍经验活动");
}
if (text("去翻倍").exists()) {
text("去翻倍").findOne().click()
video_look()
sleep(2000);
if (text("我知道了").exists()) {
click("我知道了", 0)
sleep(2000);
}
if (textContains("章节卡碎片").exists()) {
log("签到领章节卡活动结束");
} else {
log("签到翻倍经验活动结束");
}
} else {
if (textContains("章节卡碎片").exists()) {
log("签到领章节卡已完成");
} else {
log("签到翻倍机会已用完");
}
}
log("———————");
log("返回主界面")
back()
} else {
log("———————");
log("未进入今日福利");
}
} else {
log("———————");
log("今日福利点击失败");
}
log("———————");
sleep(1000);
// var mokuai_jilisuipian = require('激励碎片.js');
// mokuai_jilisuipian.step()
log("脚本已结束,记得清理auto.js后台");
log("控制台3秒后自动关闭");
sleep(3000);
console.hide()
engines.stopAllAndToast()
} else {
log("未成功打开“我”");
}
} else {
log("起点未启动成功,请查看日志查询原因");
}
}
function video_look() {
//计时
log("———————");
log("看视频");
sleep(2000);
if (textContains("播放将消耗流量").exists()) {
click("继续播放", 0)
}
//判断是否进入视频播放页面
let m = 0;
do {
m++
sleep(1000);
if (textContains("可获得奖励").exists()) {
break;
} else {
log("缓冲……")
}
if (m > 5 && !(textContains("领取奖励").exists()||textContains("可获得奖励").exists())) {
return;
}
}
while (!textContains("可获得奖励").exists())
//获取退出坐标
var video_quit = "";
var x1 = 1;
var x2 = 1;
var y1 = 1;
var y2 = 1;
var thread = threads.start(
function coordinate() {
sleep(3000);
if (textContains("可获得奖励").exists() && !video_quit) {
video_quit = textContains("可获得奖励").findOne().bounds()
x1 = 0;
x2 = video_quit.left;
y1 = video_quit.top;
y2 = video_quit.bottom;
console.log("退出坐标", parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
} else {
console.log("计算退出坐标失败,稍后重新获取")
}
}
);
var video_flag = "";//视频文字信息
//判断视频是否播放到满足领取奖励条件
var storage = "";
do {
if (textContains("可获得奖励").exists()) {
if (textContains("观看完视频").exists()) {
video_flag = "观看完视频,可获得奖励"
}
if (textContains("观看视频").exists()) {
video_flag = textContains("观看视频").findOne().text()
}
if (textContains("有声书").exists()) {
video_flag = textContains("有声书").findOne().text()
}
if (video_flag != storage && storage.length <= 0) {
console.log(video_flag)
}
if (video_flag != storage && storage.length > 0) {
console.log(video_flag)
if (video_flag.includes("视频0秒") || video_flag.includes("收听0秒")) {
console.log("结束");
sleep(1500);
break;
}
}
storage = video_flag;
} else {
if (video_flag.includes("观看完视频")) {
console.log("结束");
sleep(1500);
break;
}
}
if (textContains("继续观看").exists()) {
textContains("继续观看").click()
sleep(1500);
}
if (textContains("继续听完").exists()) {
textContains("继续听完").click()
sleep(1500);
}
}
while (!video_flag.includes("已"));
thread.interrupt()
//退出视频
let n = 0;
do {
n++
if (n == 1) {
click(parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
} else if (n > 1 && textContains("可获得奖励").exists()) {
log("退出失败,重新获取退出坐标")
if (textContains("跳过广告").exists()) {
text("跳过广告").findOne().click()
} else if (textContains("跳过视频").exists()) {
text("跳过视频").findOne().click()
} else {
if (textContains("可获得奖励").exists()) {
video_quit = textContains("可获得奖励").findOne().bounds()
}
x1 = 0;
x2 = video_quit.left;
y1 = video_quit.top;
y2 = video_quit.bottom;
var bounds = true;
do {
var x = random(x1, x2);
var y = random(y1, y2);
console.log("区域随机点击", x, y)
click(x, y);
if (textContains("继续观看").exists()) {
textContains("继续观看").click()
sleep(1500);
}
if (textContains("继续听完").exists()) {
textContains("继续听完").click()
sleep(1500);
}
}
while (textContains("可获得奖励").exists());
}
} else if (!textContains("可获得奖励").exists()) {
log("尝试模拟“手势返回”")
back()
} else {
log("未知原因退出失败,脚本停止运行")
engines.stopAllAndToast()
}
sleep(3000);
}
while (!(textContains("福利中心").exists() || textContains("视频奖励").exists() || text("签到").exists()));
log("关闭视频")
log("———————");
}
|
免费评分
-
查看全部评分
|