起点读书脚本6.1.7更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)
本帖最后由 KhScript 于 2024-4-17 15:46 编辑基于auto.js或autox.js的起点7.9.336.1206版本app日签脚本
理论上是兼容所有版本的起点app的,但代码是基于起点7.9.336.1206版本进行开发的,
首次使用请在录屏的情况下进行运行,这样有问题,可以评论区将录屏以附件或百度网盘链接的形式发出来,提问题标准格式:手机型号+系统类型及版本+起点app版本+录屏
关于帖子分享问题:
1,代码本身是开源的,支持任何人的二次创作,如果我的代码帮助了你,那我与有荣焉;但任何基于本代码的二次创作作品都禁止用于盈利(事实上我已经发现在“**脚本”,“C**N”等平台有人剽窃代码,没有任何删改且标明原则发布,其中在“**脚本”平台竟然还是收费的)
2,关于帖子分享问题,我理解大家乐于分享的心情,并且吾爱破解平台本身也是一个分享渠道,但请大家注意分享渠道(事实上我已经发现有人在起点书评区分享了,那么喜欢贴脸开大吗?)
3,就我个人而言,我希望每一个朋友都是靠自己找到本帖子的,而不是因为他人的分享得到的(我喜欢低调)
(也请不要老是更新,每次起点更新的东西你用的到吗?那就是产品经理为了让自己显的有作用加的乱七八糟东西罢了。在不影响日常使用的情况下,不建议更新起点,其他APP也一样,旧手机尤其适用这一规则)
PS:代码仅用于js代码学习、交流、讨论!
————————————————————————
起点脚本6.1.7更新
修复:解决偶尔获取不到退出坐标脚本卡死的问题
注:脚本每次更新都是对旧版兼容的,新旧的福利中心或者签到页都是兼容
————————————————————————
模块功能的启用是考虑三点产生的:
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吾爱币)
————————————————————————
高频问题1:脚本提示“脚本运行异常,请将起点、auto.js后台清理后尝试重新运行”
原因是因为网络延迟,手机卡顿,或没有定位到“我”的控件坐标,导致脚本在15秒内未能进入福利中心,前两点无法处理,第三点有三种处理方式,我在代码中提供了三种点击“我”的方案,其中方案三仅对部分机型有效,遇到了可以优先尝试方案三。
分别是:第39-44行代码、第45行代码。
如果方案一二都不行,请对方案二进行更改,将第44行代码的150,改成0-300以内的数字,不同尺寸,分辨率的手机更改的数字不同,请酌情更改。
————————————————————
附最新代码,代码运行出现问题请评论区贴图,楼主只有3个账号,两台手机(荣耀magic5pro,荣耀30pro)可以测试脚本,测试样本数量远远不够,维护ing……
```
console.show()
auto.waitFor()
console.setTitle("6.1.7");
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()))
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()) {
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()) {
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);
}
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);
let i = 0;
do {
i++
sleep(1000);
console.log("已收听", i + "秒")
if (!(i % 10)) {
console.log("防休眠点击")
click(1, 1)
}
}
while (i < 70);
back()
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("———————");
if (textContains("章节卡碎片").exists()) {
//抽奖活动
log("抽奖活动")
sleep(2000);
if (textContains("抽奖机会").exists() || text("立即抽奖").exists() || text("机会+1").exists() || textContains("点击抽奖").exists()) {
log("开始抽奖")
if (text("立即抽奖").exists()) {
text("立即抽奖").findOne().click()
} else if (text("机会+1").exists()) {
text("机会+1").findOne().click()
} else if (textContains("抽奖机会").exists()) {
textContains("抽奖机会").findOne().click()
} else if (textContains("点击抽奖").exists()) {
textContains("点击抽奖").findOne().click()
}
do {
sleep(1000);
if (className("android.view.View").text("明天再来").exists()) {
break;
}
if (className("android.view.View").text("看视频抽奖喜+1").exists()) {
log("看视频抽奖")
className("android.view.View").text("看视频抽奖喜+1").findOne().click()
} else if (className("android.view.View").text("抽 奖").exists()) {
log("赠送抽奖")
className("android.view.View").text("抽 奖").findOne().click()
}
let video_course = true
let j = 0;
do {
j++
sleep(1000);
if (j > 4 || className("android.view.View").text("明天再来").exists()) {
video_course = false
break;
}
log("等待中……")
}
while (!(textContains("观看视频").exists() || textContains("观看完视频").exists()))
if (video_course) {
video_look()
}
sleep(2000);
if (text("我知道了").exists()) {
click("我知道了", 0)
sleep(2000);
}
}
while (textContains("剩余") && ((className("android.view.View").text("抽 奖").exists()) || className("android.view.View").text("看视频抽奖喜+1").exists()));
sleep(2000);
log("抽奖活动结束")
log("———————");
if (className("android.view.View").text("明天再来").exists()) {
log("返回主界面")
back()
} else {
log("错误");
}
} else {
log("抽奖活动结束");
log("———————");
if (className("android.view.View").text("明天再来").exists()) {
log("返回主界面")
back()
} else {
log("返回主界面")
back()
}
}
} else {
//签到福利——起点币
log("概率得起点币活动");
sleep(3000);
do {
if (!textContains("看视频").exists()) {
break;
}
textContains("看视频").findOne().click()
video_look()
sleep(3000);
if (text("我知道了").exists()) {
click("我知道了", 0)
sleep(3000);
}
}
while (textContains("每天看视频").exists());
sleep(2000);
//抽奖
log("概率得起点币活动结束")
log("———————");
log("抽奖活动")
sleep(2000);
if (text("立即抽奖").exists() || text("机会+1").exists()) {
log("开始抽奖")
if (text("立即抽奖").exists()) {
text("立即抽奖").findOne().click()
} else if (text("机会+1").exists()) {
text("机会+1").findOne().click()
}
do {
sleep(1000);
if (className("android.view.View").text("明天再来").exists()) {
break;
}
if (className("android.view.View").text("看视频抽奖喜+1").exists()) {
log("看视频抽奖")
className("android.view.View").text("看视频抽奖喜+1").findOne().click()
} else if (className("android.view.View").text("抽 奖").exists()) {
log("赠送抽奖")
className("android.view.View").text("抽 奖").findOne().click()
}
let video_course = true
let j = 0;
do {
j++
sleep(1000);
if (j > 4 || className("android.view.View").text("明天再来").exists()) {
video_course = false
break;
}
log("等待中……")
}
while (!(textContains("观看视频").exists() || textContains("观看完视频").exists()))
if (video_course) {
video_look()
}
sleep(2000);
if (text("我知道了").exists()) {
click("我知道了", 0)
sleep(2000);
}
}
while (textContains("剩余") && ((className("android.view.View").text("抽 奖").exists()) || className("android.view.View").text("看视频抽奖喜+1").exists()));
sleep(2000);
log("抽奖活动结束")
log("———————");
if (className("android.view.View").text("明天再来").exists()) {
log("返回主界面")
back()
} else {
log("错误");
}
} else {
log("抽奖活动结束");
log("———————");
if (className("android.view.View").text("明天再来").exists()) {
log("返回主界面")
back()
} else {
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("看视频");
//判断是否进入视频播放页面
do {
sleep(1000);
if (textContains("可获得奖励").exists()) {
break;
} else {
log("缓冲……")
}
}
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("———————");
}
``` 本帖最后由 天使号列车 于 2024-4-3 09:12 编辑
这是我搬运的github地址,可以直接从这里下载到最新的脚本
https://github.com/Ren-Boo/QiDianDuShu/releases 本帖最后由 KhScript 于 2024-4-18 02:16 编辑
黑咖啡凤凰 发表于 2024-4-17 22:23
现在起点出了个分享视频到抖音也有章节券啦
这个功能我不好做呀,首先就是我从来都没有注册过抖音,不过这个我可以借个账号,也不是什么大问题,然后他这个分享视频到抖音的操作,是会验证是否分享到抖音上的,这就涉及两个问题,第一个是不同系统对于应用打开其他软件这个操作有不同的弹窗,我不知道小米,vivo,魅族之类的手机都是怎么处理这个应用跳转问题的;第二,他这个分享到抖音,好像需要连续分享四次,每一次都会验证是否分享,不像其他分享类的活动只需要点击分享打开其他应用后,直接取消分享,再返回就可以虚假分享来领取。这就导致,真的需要去操作抖音发布分享,超纲了呀,我不了解抖音啊,账号都没注册过(我并不是看不起抖音啊,只是我这个人自制力很差,抖音刚出来时,偶尔拿别人手机玩了一会抖音,然后就莫名其妙刷了4个小时,之后就十分害怕沉迷其中,一直都没敢再接触)
这里希望有能力的朋友帮忙开发一下,可以做成模块脚本嵌入主脚本运行,我替大家谢谢好心大佬 本帖最后由 KhScript 于 2024-1-26 19:15 编辑
适用于安卓14,鸿蒙;安卓13不知道能不能用(平时白嫖连个评分,热心值都不给就算了,现在测试维护急需反馈能不能吱吱声?) 本帖最后由 KhScript 于 2024-1-28 22:00 编辑
gto250 发表于 2024-1-28 19:48
视频看完就会卡在观看视频0秒后可获得奖励,广告不能关闭
版本5.2.5
修复安卓14手机,卡在"观看视频0秒后可获得奖励"不能退出视频的bug @gto250
适用于安卓14,鸿蒙;安卓13及以下理论上可以用,不能用记得评论回复(平时白嫖连个评分,热心值都不给就算了,现在测试维护急需反馈能不能吱吱声?)
建议首次使用时,开启录屏,这样有问题时直接可以给我发录屏。
现在维护脚本的最大问题就是,你们手机上的问题,我复现不了,所以每一次修改都是在猜各位失败的原因。
另外如果鸿蒙系统在运行脚本时,显示当前设备的Android版本为:**,是正常的,目前各位使用的还不是鸿蒙next,Android软件运行是以兼容模式运行
在鸿蒙,安卓13及以下的手机上:当视频播放页面,文字是“观看完视频,可获得奖励”时,有概率不能正常退出视频,循环显示已观看**秒,,不出意外这个bug会在以后得日子里多次出现,是个长期维护的任务,具体原因在测试版稳定后进行解释,懂代码的人可以看看第516行,那个地方以后或许要加很多个“或条件” 本帖最后由 记逸 于 2024-1-24 08:56 编辑
起点修改了广告的样式,现在顶部是一个“观看视频X(不停减少的数字)秒,可获奖励”,到时间就变成:已看视频15秒,可获奖励“,返回键不能触发中断广告了,左上角的叉点了之后触发广告暂停选择继续观看或跳过,两个手机测试过,分别是小米k40,miui14,起点版本7.9.326,小米9,miui12.5,起点版本7.9.316
图片里面的暂停只通过点击左上角的叉才能出现,返回键和点击其他地方都不能触发暂停广告
忘记讲了,三个版本的脚本最开始的,11月的5.1和头两天的5.2三个脚本都测试过,同样的问题,我不懂编程,不过猜测原因是之前5.1版本需要暂停一下读取需要观看视频的时间,这个操作是通过返回暂停的,现在返回键不能触发暂停读取不了观看时间,所以一直卡在组件0 楼主我是这种界面,,一直显示缓冲中... 本帖最后由 KhScript 于 2024-1-24 15:07 编辑
针对起点广告页面改版导致脚本失效的问题,需要点时间做改动,改动期间会不定时发布测试版本,请大家每天看一眼帖子的置顶是否有最新的测试版本。
本帖最后由 Fzero 于 2023-11-10 10:13 编辑
起点7.9.310版,新福利中心页面,楼主大佬4.0版本脚本运行到第56行时会卡住一直循环 缓冲中
我将4.0版本脚本第56行
while (!className("android.view.View").text("每日视频福利").exists());
修改为
while (text("每日福利").exists());
第73行
className("android.widget.Button").textContains("看第").click();
修改为
className("android.widget.Button").textContains("看视频领福利").click();
可以成功运行
KhScript 发表于 2024-2-3 16:55
高频问题3补充文字:
“点击下载”,“去微信看看” 感谢@qqq1119237 的提供
限时任务那里赶紧可以加一个小下滑,昨天运行的时候,一直在重复运行,今天我自己改了一下好了 xxggla666 发表于 2024-2-6 23:45
嗯老哥说的很好,这个我自己在用了,没分别人,另外老哥你可以看一下你的那个限时任务那里只查找了文字, ...
这个是历史原因,加了后部分旧手机直接识别不到控件了,年后我再测试一下 KhScript 发表于 2024-2-6 01:02
你这个跳过视频,是指不看,直接跳过吗?那你这种行为很危险啊。使用脚本看视频,本质上并没有影响起点的 ...
嗯老哥说的很好,这个我自己在用了,没分别人,另外老哥你可以看一下你的那个限时任务那里只查找了文字,好像有点不行,我加了className和packageName,准确率大大提高了 本帖最后由 KhScript 于 2024-2-6 01:04 编辑
xxggla666 发表于 2024-2-4 18:12
我有点基础,看了一下老哥的代码,简单二次修改了一个个有跳过看视频模块的脚本
你这个跳过视频,是指不看,直接跳过吗?那你这种行为很危险啊。使用脚本看视频,本质上并没有影响起点的广告收益,甚至因为完播率很高,反而是有助于收益的。但如果是直接跳过,那就涉及核心利益了,起点会花大力气进行反脚本的。
我的建议是,如果你真的是直接跳过的,那你二次创作后的代码,请不要分享给任何人,你这样,一旦大规模使用,势必会开启大规模反脚本,会让我后期维护很困难。
另外,我年后得发表个声明,禁止任何人以任何方式进行代码分享或推荐,我希望各位都是凭本事自己刷到的。 小白有点看不懂,有没有电脑版的呢 大佬,能不能弄一份电脑版的,我要抄作业 sleep(3000);
????升级一下 期待楼主改进,手机费眼,期待电脑版的。 6,有用,收下了 LC20201314 发表于 2023-8-18 14:21
小白有点看不懂,有没有电脑版的呢
网页不行,起点电脑端因为反盗版,反脚本已经反魔怔了,简直杀红了眼 Summer000 发表于 2023-8-21 14:55
sleep(3000);
????升级一下
3秒是个很稳定的时间了,再往后延时只会让脚本显得很呆,怀疑脚本是否运行正常。目前我自测的总结出错的原因大概有两方面1,是网络延时,2,是每个图层的按键加载出来的时间不同,导致获取时按键信息时出问题。但我解决不了,监听需要root权限,为了一个脚本大可不必,也做不到(我用的华为全家桶,系统封闭性太强) maxbo 发表于 2023-8-21 21:40
期待楼主改进,手机费眼,期待电脑版的。
手机应用哪有电脑版,而且现在起点APP在模拟器里直接闪退打不开。。。
起点网页上有签到活动? 发生异常:每日视频时 78 行找不到 text 方法