起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)

这篇具有很好参考价值的文章主要介绍了起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于auto.js或autox.js的起点7.9.312.1076版本app日签脚本

理论上是兼容所有版本的起点app的,但代码是基于起点7.9.312.1076版本进行开发的,有问题请更新或注明起点版本(也请不要老是更新,每次起点更新的东西你用的到吗?那就是产品经理为了让自己显的有作用加的乱七八糟东西罢了。在不影响日常使用的情况下,不建议更新起点,其他APP也一样,旧手机尤其适用这一规则)

PS:代码仅用于js代码学习、交流、讨论!
起点脚本5.1更新
在原计划发布的5.0版本基础对观看视频的代码逻辑进行了优化,至于未发布的5.0已经被淘汰了,原因是我发现最近起点的看视频时长有增加的趋势,就是说原本绝大部分视频都是看小于等于15秒视频即可获取,但是最近出了一个所谓的“白泽装扮”,视频时长是观看随机的小于等于30秒才可以获取,这是一个信号,意味着后续视频福利的观看时长可能会增长(实际上有一次我在网络波动的情况下测试脚本,开宝箱的视频竟然是观看20秒才可以领取),所以我取消了原计划11月13号发布的脚本5.0,进行延期优化。另外星期二我老爸突然受伤了,我去医院照顾了几天,耽误了点时间今天才写好,而且由于时间匆忙,代码稳定性的测试还没进行就在今天匆匆发布了,大家有问题,多多提出(附截图,以及语言描述,最好是稳定复现的问题,比较好解决)
新增:兼容新版开宝箱福利中心,优化观看视频代码逻辑。
注:脚本每次更新都是对旧版兼容的,新旧的福利中心或者签到页都是兼容


代码是一边学一边写的,大体功能都可以实现(每日视频福利,限时福利,签到,经验翻倍,概率得起点币,抽奖,章节卡碎片,开宝箱),但是有概率某个按键点击事件失效,至今没找到原因,如果你使用了我的代码。并且有这方面的代码基础,可以帮我维护一下,解决这个问题
运行代码前,需要给auto.js无障碍,悬浮窗权限,并且运行前最好先手动打开起点app将一些每日首次启动的意外弹窗点击掉,例如青少年模式,各种促销活动弹窗,之后关闭起点,运行auto.js


起点脚本2.0更新
经过一段时间的测试,再一次优化了代码,进一步降低点击事件的失效问题。
另经过最近的测试,平板电脑不能使用该代码,因为楼主是使用图层来定位某些按键的,平板的图层与手机的不同会导致代码点击事件失效一大部分,目前不打算修复这个问题,等哪天闲下来再说吧。
———————————————————————
起点脚本3.0更新
优化+控件的点击,移除通过图层来获取控件的操作,通过坐标计算点击位置,好处是点击的位置更准确,坏处是脚本运行期间如果弹出意外弹窗(微信消息之类的横屏弹窗)会误点导致脚本运行出错。
运行脚本的手机如果太远古,会因为各种应用卡顿导致脚本运行出问题(例如打开某个页面反应过慢会一直点击,导致最后同一个页面打开很多个),暂不修复这个问题,优化这玩意好难,永远不知道旧手机会卡在哪一步……
———————————————————————
起点脚本4.0更新
新增:兼容两种版本的起点签到页,即,签到获取经验和签到获取章节卡碎片两种版本
注:周日章节卡碎片兑换的操作还是要自己来,因为我也不知道你要换哪一种章节卡,还是自己按照需求换吧
————————————————————————
高频问题1:脚本提示“脚本运行异常,请将起点、auto.js后台清理后尝试重新运行”
原因是因为网络延迟,手机卡顿,或没有定位到“我”的控件坐标,导致脚本在15秒内未能进入福利中心,前两点暂时不知道怎么处理,第三点有两种处理方式,我在代码中提供了两种点击“我”的方案,
分别是:第39-44行代码、第45行代码。
如果方案一二都不行,请对方案二进行更改,将第44行代码的150,改成0-300以内的数字,不同尺寸,分辨率的手机更改的数字不同,请酌情更改。
————————————————————
高频问题2:视频没看完,就提前点击了退出
起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖),python原创转载,音视频,python,学习,人工智能
如图
原因:楼主的代码大量运用了sleep()函数,但sleep()函数本身并不是一个高精度的延时函数,在不同设备中的实际延时存在误差,也就是说,sleep(1000),并没有实际延时1秒。可能实际只延时了0.9秒?或多延时了0.1秒,变成了延时1.1秒。
解决方法:将所有的sleep()手动增加0-100毫秒,也就是sleep(1000)改成sleep(1100),具体改多少取决于你实际距离视频播放完毕差了的秒数乘以1000除以15.
例如离播放完毕差了1.5秒,就提前点击了视频的退出按钮,那计算过程就是1.5*1000/15=100,那sleep(1000)改成sleep(1100),当然,还要考虑网络延迟等情况,建议再酌情加一点,比如sleep(1200)?
鉴于因sleep()函数精度问题产生的bug多产生在视频播放这里,所以只需更改下面代码块的sleep()就可以了


do {
    sleep(1000);.//改这里的
    video_length--
    console.log("倒计时", video_length - count_down + 1)
}
while (video_length > count_down);```

————————————————————
高频问题3:在视频播放页面,弹窗不断循环显示“组件数量:**”

原因:推测和安卓14系统有关,目前该问题仅在更新了最新的安卓14系统后出现,在原来安卓13或鸿蒙系统中,起点视频播放页面的前端显示组件一共是30个。我根据这个特性来判断视频播放页面是否加载完成,但后续更新安卓14系统的手机,起点视频播放组件却只有20个了,因此产生了这个问题。
解决方法:将代码第418行的:while (control_all.length < 30);中的,“30”,改成“20”,就可以了。
PS:原则上当出现此问题时,脚本运行时前端循环显示的“组件数量:**”是多少,第418行的数字就改为多少,但请注意,当组件数量少于或等于14的时候,脚本就运行不下去了(如果依然运行下去了,也请告诉我,我惊呆了!),请在评论区将运行日志,运行截图,最好还有运行的视频,以压缩包或百度网盘的形式发出来。
————————————————————
附最新代码,代码运行出现问题请评论区贴图,楼主只有3个账号,两台手机(荣耀magic5pro,荣耀30pro)可以测试脚本,测试样本数量远远不够,维护ing……
起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖),python原创转载,音视频,python,学习,人工智能
起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖),python原创转载,音视频,python,学习,人工智能
起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖),python原创转载,音视频,python,学习,人工智能文章来源地址https://www.toymoban.com/news/detail-806131.html

console.show()
auto.waitFor()
console.setTitle("版本5.1");
console.setPosition(0, device.height / 1.6)
console.setSize(device.width / 2, device.width / 2)
if (auto.service == null) {
    log("请先开启无障碍服务!");
} else {
    log("无障碍服务已开启");
    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)
        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 (text("明日再来吧").exists() || textContains("今日福利已领完").exists()) {
                        break;
                    } else {
                        className("android.widget.Button").textContains("看视频领福利").click();
                        video_look()
                        sleep(2000);
                        if (textContains("我知道了").exists()) {
                            click("我知道了", 0)
                        }
                        sleep(3000);
                    }
                } 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("限时任务,已完成,开始签到");

            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);
            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() || textContains("观看完视频").exists()) {
            break;
        } else {
            log("缓冲……")
        }
    }
    while (!(textContains("观看视频").exists() || textContains("观看完视频").exists()))
    sleep(1000);
    var control_all = "";
    do {
        control_all = className("android.view.View").find()
        console.log("组件数量", control_all.length)
    }
    while (control_all.length < 30);
    var video_length = 0;
    for (var i = 0; i < control_all.length; i++) {
        if (!isNaN(parseFloat(control_all[i].text()))) {
            video_length = control_all[i].text()
            break;
        }
    }
    if (video_length === 0) {
        video_length = Number(video_length) + Number(15)
        log("因网络或手机性能波动,未获取到视频时长,默认视频时长为15秒");
        sleep(1010);
    }
    console.log("视频时长", video_length + "秒")
    var video_quit = "";
    if (textContains("观看视频").exists() && !video_quit) {
        video_quit = textContains("观看视频").findOne().bounds()
    } else if (textContains("观看完视频").exists() && !video_quit) {
        video_quit = textContains("观看完视频").findOne().bounds()
    }
    var x1 = 0;
    var x2 = video_quit.left;
    var y1 = video_quit.top;
    var y2 = video_quit.bottom;
    var count_down = 0;
    console.log("退出坐标", parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
    if (textContains("观看视频").exists() || textContains("观看完视频").exists()) {
        click(parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
    } else {
        back()
    }
    sleep(1000);
    var video_flag = "";
    do {
        if (textContains("可获得奖励").exists()) {
            video_flag = textContains("可获得奖励").findOne().text()
            console.log("文本获取", video_flag)
        }else{
            log("缓冲……")
        }
    }
    while (!video_flag);
    if (textContains("秒").exists()) {
        var video_segment = [];
        if (video_flag.includes("秒")) {
            var nums = "1234567890";
            for (var i = 0; i < nums.length; i++) {
                for (var j = 0; j < video_flag.length; j++) {
                    if (video_flag[i] == nums[j]) {
                        video_segment.push(video_flag.charAt(i))
                    }
                }
            }
        } 
        video_segment = video_segment.join("")
        console.log("观看时长", video_segment + "秒")
        count_down = Number(video_length) - Number(video_segment)
        textContains("继续观看").click()
    }else if(textContains("完").exists()){
        textContains("继续观看").click()
    }
    do {
        sleep(1010);
        video_length--
        console.log("倒计时", video_length - count_down + 1)
    }
    while (video_length > count_down);
    console.log("退出坐标", parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
    if (textContains("观看视频").exists() || textContains("观看完视频").exists()) {
        click(parseInt((x1 + x2) / 2), parseInt((y1 + y2) / 2))
    } else {
        back()
    }
    log("关闭视频")
    log("———————");
}

到了这里,关于起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包