科普中國 轉發 分享 自動腳本


科普中國單位任務,一個月需要轉發量達到400以上,科普中國一天計算的轉發量最多是300次,而且在微信轉發頁面中,可以取消分享,返回app也是計算分享量的,一個文章多次轉發也都計算轉發量。

腳本思路就很簡單了,直接打開app,打開一個文章,然后轉發,分享到微信,返回繼續轉發。

function 打開到頁面() {
    let clickResult = false;
    var appName = "科普中國";
    launchApp(appName);
    sleep(2000);
    clickControl(text("跳過"));
    clickControl(id("com.sevenplus.chinascience:id/tab_image_iv1"));
    sleep(2000)
    clickControlList(id("com.sevenplus.chinascience:id/zx_rl"), 1);
    sleep(2000)

}
function 分享() {
    clickControl(id("iv_close"));
    clickControl(id("zhuanfa_share_rly"));
    clickControl(text("微信好友"));
    clickControl(text("微信"));//有多個微信的時候,選擇第一個
   if(clickControl(id("eh"))) return true; //返回成功的會計算一次轉發成功

}

/**
 * 找到控件組中第index個的坐標,然后點擊該控件
 * @param {要查找的元素} element 
 * @index {點擊的順序} index 
 */
 function clickControlList(element, index) {
    try {
        let controlArray = element.find();
        if (controlArray != null) {
            let controlLength = controlArray.length;
            for (let i = 0; i < controlLength; i++) {
                //toastLog(controlArray[i].bounds())
            }
            let b = controlArray[index].bounds()
            return clickBounds(b) //點擊第index個,這個函數在上面定義了
        } else {
            return false
        }
    } catch (error) {
        return false
    }
}


/**
 * 點擊一個已經知道是第幾個父親可點擊的控件,避免坐標點擊時坐標位置被其他app占用了會失效的問題
 * @param {*} obj 一個找到了的控件
 *            i=1時,是一個父親,最多到3層吧 
 * @returns 
 */
function clickObj(obj, i) {
    let clickResult = false;
    try {
        if (obj == null) return false;
        switch (i) {
            case 0:
                clickResult = obj.click();
                break;
            case 1:
                clickResult = obj.parent().click();
                break;
            case 2:
                clickResult = obj.parent().parent().click();
                break;
        }
        return clickResult;

    } catch (error) {
        toastError(error)
        return false;
    }
}


/**
 * 點擊UI上的控件,如果控件不可點擊,就根據控件坐標點擊
 * @param {UI上的元素} element 
 */
function clickControl(element) {
    let clickResult = false;
    try {
        //加個延時的,比如給時間5秒,5秒內未找到控件才返回false,不然就等待
        if (!element.exists()) element.findOne(5000)

        if (element.exists()) {
            toastLog("准備click:" + element.findOnce().getText());
            let clickable = element.findOnce().clickable(); //是否可以點擊
            if (clickable) {
                clickResult = element.findOnce().click();
                sleep(random(1000, 1200));
            } else {
                let b = element.findOnce().bounds();
                clickResult = click(b.centerX(), b.centerY());
                sleep(random(1000, 1200));
            }
        }
        return clickResult;
    } catch (error) {
        toastError(error)
        return false;
    }

}

因為一個月只需要400多次就行了,所以增加一個計算轉發了多少次的計數,保存在本地,下次打開軟件讀取已經轉發了多少

function 計算存儲值() {
    //轉發總量
    //當月轉發量
    //當天轉發量"day_num"

    curTime = new Date();
    mon =curTime.getMonth() + 1;
    day = curTime.getDay() ;
    var storage = storages.create("kepu");
    //初次運行,沒有設置過month的,全部初始化。
    if(storage.contains("month")) {
        var month = storage.get("month");
        if(month == mon){
           if(storage.get("month_num")>=storage.get("sum_num")) {
               log("當月任務已完成!")
               return 0;
           }
           if(storage.get("day")==day){
                if(storage.get("day_num")>=300) {
                    log("今日任務已完成!")
                    return 0;

                }
            }else{
                //日期不同,初始化
                storage.put("day", day);
                storage.put("day_num", 0);
            }

            當月剩余 = storage.get("sum_num")-storage.get("month_num")
            if(300-storage.get("day_num")>當月剩余){
                return 當月剩余;
            }else{
                return 300-storage.get("day_num");
            }


        }else{
            //當月第一次使用,初始化值
            storage.put("sum_num",ui.num.getText());
            storage.put("month", mon);
            storage.put("month_num",0);
            storage.put("day", day);
            storage.put("day_num", 0)
            return 300;
        }

    }else{
        //沒有的話就初始化;
        storage.put("sum_num",ui.num.getText());
        storage.put("month", mon);
        storage.put("month_num",0);
        storage.put("day", 0);
        storage.put("day_num", 0)
    }

    

}

寫的比較復雜,可是能用就行。過幾天可能自己都不知道是怎么寫的了。。

基本主要的代碼就是這樣了,然后運行后的效果圖

為了省電,百度找到了息屏的代碼

function 息屏() {

    var h = confirm("是否要進入息屏掛機模式嗎?可按下音量上鍵停止輔助。並不能鎖定屏幕!!!通知欄會正常顯示(oled屏可用)");
    if (h) {
        var w = floaty.rawWindow(
            <frame gravity="center" bg="#000000"/>
        );

        w.setSize(-1, -1);
        w.setTouchable(true);
        //保持腳本運行
        setInterval(() => {}, 1000);
    }
}

不過腳本只能采用控件點擊才能實現息屏運行,如果控件坐標點擊的方式的話,息屏無法點擊。

附上成品鏈接

鏈接:

https://wws.lanzoui.com/iC3g5sgzkfe
密碼:ef0b

如果腳本對你有用,可以在軟件支持作者里,微信掃碼打賞下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM