科普中國單位任務,一個月需要轉發量達到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
如果腳本對你有用,可以在軟件支持作者里,微信掃碼打賞下。
