欢迎大家访问我的网站!
图片名称

起点读书最新刷视频脚本

iwfacn2024-12-30 18:58:31101免费资源免费教程

起点读书最新刷视频脚本

时间 2024.12.28
脚本目前仅支持签到和刷视频
(ps:因为签到和福利中心在一起,打开福利中心就可以签到了)
本栏目主要提供两个版本
一个是脚本文件:用于提供给能够熟练使用Auto.js\VScode进行开发的玩家
一个是打包好的APP:用于提供给新手小白,需要提供文件访问权限,无障碍权限,悬浮窗权限
APP使用过程中需要提前关闭起点读书APP,同时可以按音量上键结束脚本

脚本文件
[JavaScript] 纯文本查看 复制代码

// 初始化
console.show(); //显示控制台
log("初始化");
auto.waitFor(); // 无障碍服务
log("无障碍服务已启动");
console.setTitle("起点签到脚本"); // 设置控制台标题
console.setPosition(0, device.height / 1.6) // 设置控制台位置
console.setSize(device.width / 2, device.width / 2) // 设置控制台大小
// 启动起点
log("启动起点");
app.launchPackage('com.qidian.QDReader');
waitForPackage('com.qidian.QDReader');
waitForActivity('com.qidian.QDReader.ui.activity.MainGroupActivity');
waitView("书架").click();
log("应用已识别");

const regex_ad_1 = /观看视频(\d+)秒后,可获得奖励/
const regex_ad_2 = /收听(\d+)秒有声书可获得奖励/
const regex_game = /(\d+)\/(\d+)分钟/
let textView;

// 签到
if(className("android.widget.TextView").text("领福利").exists()){
  click("领福利",0);
  sleep(5000);   // 等待1秒
  if(className("android.widget.TextView").text("已连续签到")){
    log("签到成功");
  }else{
    log("签到失败");
  }
}

// 看视频
while(textView = findView("看视频")) {
    clickButton(textView);
    watchAds();
    sleep(1000);
}
log("看视频 结束");



// 结束部件
log("脚本已结束,记得清理auto.js后台");
log("控制台3秒后自动关闭");
sleep(3000);
console.hide()
engines.stopAllAndToast()






/**
 * 根据正则表达式查找字符串中的值
 * [url=home.php?mod=space&uid=952169]@Param[/url] {string} str 字符串
 * @param {RegExp} regex 正则表达式
 * @param {number|undefined} count 结果个数
 * @returns 当数量不少于需要的个数时,返回以 1 开头的数组
 */
function findValueFromString(str, regex, count) {
    if (!count) count = 1;
    let m = regex.exec(str);
    return (m && m.length >= count + 1) ? m : undefined;
}

/**
 * 查找带有某个文本的控件
 * @param {string} content 查找文本
 * @param {string} mode 查找方式,详见 findViewBy
 * @returns 第一个符合条件的控件,不存在返回 undefined
 */
function findView(content, mode) {
    log(`查找控件 ${content}`);
    let find = findViewBy(content, mode);
    return find && find.exists() ? find.findOnce() : undefined;
}

/**
 * 查找带有某个文本的控件
 * @param {string} content 查找文本
 * @param {string} mode 查找方式,详见 findViewBy
 * @returns 第一个符合条件的控件
 */
function waitView(content, mode) {
    log(`等待控件 ${content}`);
    let view = findViewBy(content, mode);
    view.waitFor();
    return view.findOnce();
}

/**
 * 查找控件
 * @param {string} content 查找文本 
 * @param {string} mode 查找方式,默认 text,可选 match,id
 * @returns selector 
 */
function findViewBy(content, mode) {
    let find;
    if (mode === 'class') {
        find = className(content)
    } else if (mode === 'match') {
        find = textMatches(content);
    } else if (mode === 'id') {
        find = id(content)
    } else {
        find = text(content);
    }
    return find;
}

/**
 * 根据文字查找按钮并点击
 * @param {UiObject} view 按钮上的文字所在 view
 * @returns 是否成功点击
 */
function clickButton(view) {
    log("点击 " + view.text());
    // 查找按钮所在控件
    let btn = view;
    while (btn && !btn.clickable()) {
        btn = btn.parent();
    }
    // 点击
    if (btn) {
        btn.click();
        return true;
    }
    return false;
}

/**
 * 看广告,等待广告结束并关闭广告
 * @returns 是否播放完成
 */
function watchAds() {
    let times = 0;
    let adType = 0;
    while (true) {
        log("等待广告中 " + times.toString());
        if (textView = findView("观看视频\\d+秒后,可获得奖励", 'match')) {
            let adTime = findValueFromString(textView.text(), regex_ad_1);
            // 应该不会有比 45s 更长的广告了吧
            adTime = adTime ? adTime[1] : 45;
            log(`广告时间:${adTime}+3s`);
            sleep(adTime * 1000);
            sleep(3000); // 额外休眠 3s
            break;
        } else if (textView = findView("收听\\d+秒有声书可获得奖励", 'match')) {
            let adTime = findValueFromString(textView.text(), regex_ad_2);
            adType = 1;
            // 这个一般就十几秒,取 20s
            adTime = adTime ? adTime[1] : 20;
            log(`广告时间:${adTime}+3s`);
            // 有些广告默认暂停
            if (textView = findView('')) {
                log("开始播放");
                clickButton(textView)
            }
            sleep(adTime * 1000);
            sleep(3000); // 额外休眠 3s
            break;
        } else if (textView = findView("观看完视频,可获得奖励")) {
            while ((textView = findView("跳过广告"))) {
                sleep(1000);
            }
            break;
        } else if (textView = findView("跳过视频")) {
            clickButton(textView);
            log("广告观看失败");
            return false;
        }
        sleep(500);
        times++;
        if (times > 50) {
            device.vibrate(300);
            log("广告识别出现问题, 请检查是否正常继续进行");
            return false;
        }
    }
    // 结束
    if (adType == 1) {
        let adView = findView('com.tencent.tbs.core.webkit.WebView', 'class')
        if (adView) {
            while (!adView.children().isEmpty()) {
                adView = adView.children()[0]
            }
            clickButton(adView)
            clickButton(findView("我"));
            clickButton(waitView("福利中心"));
            waitForActivity("com.qidian.QDReader.ui.activity.QDBrowserActivity");
            waitView("激励视频任务");
        } else if (adView = findView('')) {
            clickButton(adView)
        } else {
            className('Button').text('').findOne().click();
        }
    } else if (textView = findView("跳过广告")) {
        clickButton(textView);
    } else {
        let closeButton = className("ImageView").filter(o => o.clickable()).findOnce();
        if (closeButton) closeButton.click();
        else return false;
    }
    // 等待 我知道了
    sleep(1000);
    if (textView = findView("我知道了")) {
        clickButton(textView);
    }
    log("广告已结束")
    return true;
}

// #region Debug

/**
 * 在控制台输出某个视图及所有子视图
 * @param {UiObject} view 视图
 * @param {number|undefined} level 空格等级
 */
function logView(view, level) {
    if (!level) level = 0;
    let s = "";
    for (let i = 0; i < level; ++i) s += " ";
    log(`${s}${view}`);
    view.children().forEach(v => logView(v, level + 2));
}

/**
 * 在控制台输出当前屏幕所有视图的内容
 * @param {UiObject} child 内部任意一个子视图
 */
function logRootView(child) {
    if (!child) {
        child = classNameContains("").findOnce()
    }

    let pl = 0;
    let pv = child.parent();
    while (pv) {
        pl++;
        child = pv;
        pv = child.parent();
    }
    log(pl);
    logView(child);
}

// #endregion```


起点签到APP下载
https://wwzc.lanzoub.com/i7YlK2j8o9jc
密码:3gnb
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:http://www.iwfacn.com/467.html

图片名称
热门文章
随机文章
热门标签
侧栏广告位
图片名称
图片名称