KhScript 发表于 2023-8-14 10:57

起点读书脚本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-1 21:23

本帖最后由 天使号列车 于 2024-4-3 09:12 编辑

这是我搬运的github地址,可以直接从这里下载到最新的脚本
https://github.com/Ren-Boo/QiDianDuShu/releases

KhScript 发表于 2024-4-18 02:09

本帖最后由 KhScript 于 2024-4-18 02:16 编辑

黑咖啡凤凰 发表于 2024-4-17 22:23
现在起点出了个分享视频到抖音也有章节券啦
这个功能我不好做呀,首先就是我从来都没有注册过抖音,不过这个我可以借个账号,也不是什么大问题,然后他这个分享视频到抖音的操作,是会验证是否分享到抖音上的,这就涉及两个问题,第一个是不同系统对于应用打开其他软件这个操作有不同的弹窗,我不知道小米,vivo,魅族之类的手机都是怎么处理这个应用跳转问题的;第二,他这个分享到抖音,好像需要连续分享四次,每一次都会验证是否分享,不像其他分享类的活动只需要点击分享打开其他应用后,直接取消分享,再返回就可以虚假分享来领取。这就导致,真的需要去操作抖音发布分享,超纲了呀,我不了解抖音啊,账号都没注册过(我并不是看不起抖音啊,只是我这个人自制力很差,抖音刚出来时,偶尔拿别人手机玩了一会抖音,然后就莫名其妙刷了4个小时,之后就十分害怕沉迷其中,一直都没敢再接触)
这里希望有能力的朋友帮忙开发一下,可以做成模块脚本嵌入主脚本运行,我替大家谢谢好心大佬

KhScript 发表于 2024-1-26 19:11

本帖最后由 KhScript 于 2024-1-26 19:15 编辑

适用于安卓14,鸿蒙;安卓13不知道能不能用(平时白嫖连个评分,热心值都不给就算了,现在测试维护急需反馈能不能吱吱声?)

KhScript 发表于 2024-1-28 21:30

本帖最后由 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:43

本帖最后由 记逸 于 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

potato614 发表于 2023-10-31 08:59

楼主我是这种界面,,一直显示缓冲中...

KhScript 发表于 2024-1-24 15:06

本帖最后由 KhScript 于 2024-1-24 15:07 编辑

针对起点广告页面改版导致脚本失效的问题,需要点时间做改动,改动期间会不定时发布测试版本,请大家每天看一眼帖子的置顶是否有最新的测试版本。

Fzero 发表于 2023-11-9 12:12

本帖最后由 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();

可以成功运行

xxggla666 发表于 2024-2-4 20:30

KhScript 发表于 2024-2-3 16:55
高频问题3补充文字:
“点击下载”,“去微信看看”    感谢@qqq1119237 的提供

限时任务那里赶紧可以加一个小下滑,昨天运行的时候,一直在重复运行,今天我自己改了一下好了

KhScript 发表于 2024-2-7 16:54

xxggla666 发表于 2024-2-6 23:45
嗯老哥说的很好,这个我自己在用了,没分别人,另外老哥你可以看一下你的那个限时任务那里只查找了文字, ...

这个是历史原因,加了后部分旧手机直接识别不到控件了,年后我再测试一下

xxggla666 发表于 2024-2-6 23:45

KhScript 发表于 2024-2-6 01:02
你这个跳过视频,是指不看,直接跳过吗?那你这种行为很危险啊。使用脚本看视频,本质上并没有影响起点的 ...

嗯老哥说的很好,这个我自己在用了,没分别人,另外老哥你可以看一下你的那个限时任务那里只查找了文字,好像有点不行,我加了className和packageName,准确率大大提高了

KhScript 发表于 2024-2-6 01:02

本帖最后由 KhScript 于 2024-2-6 01:04 编辑

xxggla666 发表于 2024-2-4 18:12
我有点基础,看了一下老哥的代码,简单二次修改了一个个有跳过看视频模块的脚本
你这个跳过视频,是指不看,直接跳过吗?那你这种行为很危险啊。使用脚本看视频,本质上并没有影响起点的广告收益,甚至因为完播率很高,反而是有助于收益的。但如果是直接跳过,那就涉及核心利益了,起点会花大力气进行反脚本的。
我的建议是,如果你真的是直接跳过的,那你二次创作后的代码,请不要分享给任何人,你这样,一旦大规模使用,势必会开启大规模反脚本,会让我后期维护很困难。
另外,我年后得发表个声明,禁止任何人以任何方式进行代码分享或推荐,我希望各位都是凭本事自己刷到的。

LC20201314 发表于 2023-8-18 14:21

小白有点看不懂,有没有电脑版的呢

LC20201314 发表于 2023-8-18 14:22

大佬,能不能弄一份电脑版的,我要抄作业

Summer000 发表于 2023-8-21 14:55

sleep(3000);
????升级一下

maxbo 发表于 2023-8-21 21:40

期待楼主改进,手机费眼,期待电脑版的。

lq2007 发表于 2023-8-21 23:06

6,有用,收下了

KhScript 发表于 2023-8-22 13:14

LC20201314 发表于 2023-8-18 14:21
小白有点看不懂,有没有电脑版的呢

网页不行,起点电脑端因为反盗版,反脚本已经反魔怔了,简直杀红了眼

KhScript 发表于 2023-8-22 15:08

Summer000 发表于 2023-8-21 14:55
sleep(3000);
????升级一下

3秒是个很稳定的时间了,再往后延时只会让脚本显得很呆,怀疑脚本是否运行正常。目前我自测的总结出错的原因大概有两方面1,是网络延时,2,是每个图层的按键加载出来的时间不同,导致获取时按键信息时出问题。但我解决不了,监听需要root权限,为了一个脚本大可不必,也做不到(我用的华为全家桶,系统封闭性太强)

lq2007 发表于 2023-8-22 15:44

maxbo 发表于 2023-8-21 21:40
期待楼主改进,手机费眼,期待电脑版的。

手机应用哪有电脑版,而且现在起点APP在模拟器里直接闪退打不开。。。

起点网页上有签到活动?

lq2007 发表于 2023-8-22 16:48

发生异常:每日视频时 78 行找不到 text 方法
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 起点读书脚本6.1.7更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)