注意
關于備份獎勵領取失敗的情況說明:目前沒有抓包去自動達到領取備份獎勵的條件
所以如果需要領取備份獎勵。需要你的手機/電腦開啟自動備份 且當天 登錄成功一次。【手機可以開啟后臺自啟動】
如果你手機都不啟動阿里云盤 他自然今天沒法備份 自然就沒法領取備份獎勵。
關于 pusplus推送失敗的情況說明:運行的時候調用的是金山云的服務器IP 。可能由于部分IP調用過多,被pusplus推送的官方拉黑IP了
所以導致了可能提示(XXX禁止訪問 )導致推送失敗 但是每天都是正常簽到的 。這點無需擔心
功能以及優點
不需要服務器部署、直接一個wps云文檔即可使用。
理論上實現了token的自動更新 目前測試沒問題 (只需要獲取token一次、無需后續抓包)。
利用自己想到的避開了檢測【隨機時間延遲、不同時間簽到】(IP沒改,因為很多人不會用)。
根據隨機值決定簽到的時間。避開了每天都是那個時間簽到的檢測。
增加了手機開啟自動備份的簽到獎勵【需要手機開啟備份功能 并且開啟自啟動 不然當天不登錄阿里云盤則無法領取】
不需要開電腦、不需要任何成本,都是云運行, 一次獲取,理論上可以用很久,具體多久就得到時候測試看了。
使用方法
1.首先 打開wps云文檔的連接 并且另存為 保存成你自己的!
【金山文檔】 阿里云簽到模版-另存為:https://kdocs.cn/l/coSH7LfVJjNt
2.點擊【效率】-【高級開發】-【AirScript腳本編輯器】 查看 【阿里云盤簽到】的 是否存在(如不存在請復制最下方的代碼 放進去)
3. 打開阿里云盤 :https://www.aliyundrive.com/ 登錄后 連續按兩次右鍵 選擇 檢查/審查元素 看不同瀏覽器的配置 或者更簡單的 按F12 即可

4.輸入以下代碼 將命令粘貼到【控制臺】-【回車】
copy(JSON.parse(localStorage.token).refresh_token); console.log(JSON.parse(localStorage.token).refresh_token);

5.將獲取到的token粘貼到【A1】單元格順便將token獲取時間填入,不填當token大于20天時無法更換

6.獲取pushplus和Serverchan的token
兩個選擇一個即可,兩個選擇一個即可,推薦pushplus
公主號:pushplus推送加 關注后 發送“token” 即可獲得token 復制 token 粘貼到推送(PushPlus) 的那一欄里(D列)

Serverchan-掃碼登錄
Serverchan:https://sct.ftqq.com/ 右上角 登入 登入后 拿到如下圖的sendkey 粘貼到推送(ServerChan)的那一欄里(C列)

如果你到了這里 就90%大功告成了!
7.接下來就是 測試!
如果推送成功/日志提示 簽到成功 就說明你已經成功了
【如果提示:隨機值不為1 不簽到】【如果提示:隨機值不為1 不簽到】
請再次點擊運行!請再次點擊運行!請再次點擊運行!

8。創建定時任務 【可以創建多個 可以一個 建議多個】

你們自己可以修改的地方:
1.代碼第3行:var dengdai = 1 即:1是延遲0-1分鐘內 取一個秒數 就是0到60秒取一個隨機數 不建議修改
2.代碼第6行:var renwu = 2 即:你加了幾個定時任務 然后-1 就是你定時2個任務 就寫2 定時3個 就寫2 定時4、5個建議也寫3 建議最大到2或者3
簡言之:比如你定時任務X個 然后每一次執行都會從1 到 你設置的數 之間取一個隨機值 是1 才簽到
PS:如果你只需要一個定時任務 renwu 請寫1。
3.代碼第7行:var zong = 10 即: 一共執行10個任務 如果你需要多增 那就在前10行內隨意一行 :插入行 就可以了(保持原作者的第11 行一直在所有token最下面)
4.最重要的,如果你手機沒有開啟 自動備份功能 不需要領取自動備份的獎勵的話!
第11行的 var backups = true true 改成 false 如果你需要領取 就不動!

配置過程中可能遇到的問題
1.問:配置完成,運行腳本出現{“code”:999,”msg”:”所在IP:120.92.xx.xxx禁止訪問”,”data”:null}
答:切換網絡再次運行或過會在嘗試
以下是代碼
var myDate = new Date(); // 創建一個表示當前時間的 Date 對象
var data_time = myDate.toLocaleDateString(); // 獲取當前日期的字符串表示
var date = `${new Date().getMonth() + 1}-${new Date().getDate().toString().padStart(2, '0')}`
//需要修改的地方
var dengdai = 2
//意思是 等待多少分鐘去登錄 等待多少分鐘去簽到 默認1-15分鐘之間 改了15就是1-X分鐘之間 取隨機的
var renwu = 2 //建議定時2個任務 就寫1 定時3個任務就寫2 定時任務-1或者-2都可以 他是從1到renwu之間 取一個隨機數
var zong = 10 //總任務 就是你有幾個號你就寫幾 就行 默認10 也可以 如果多10行 就在10行以內 右鍵 插入行
var backups = true //是否領取備份獎勵 是寫true 不領取寫false
function sleep(d) {
for (var t = Date.now(); Date.now() - t <= d;); // 使程序暫停執行一段時間
}
function log(message) {
console.log(message); // 打印消息到控制臺
// TODO: 將日志寫入文件
}
var tokenColumn = "A"; // 設置列號變量為 "A"
var qiandaoColumn = "B"; // 設置列號變量為 "B"
var serverchanColumn = "C"; // 設置列號變量為 "C"
var pushplusColumn = "D"; // 設置列號變量為 "D"
var pushColumn = "E"; // 設置列號變量為 "E"
var logindateColumn = "F"; // 設置列號變量為 "F"
var signinresult = "G"http://簽到的結果 設置列號變量為 "G"
for (let row = 1; row <= zong; row++) { // 循環遍歷從第 1 行到第 10 行的數據
var refresh_token = Application.Range(tokenColumn + row).Text; // 獲取指定單元格的值
var qiandao = Application.Range(qiandaoColumn + row).Text; // 獲取指定單元格的值
var servertoken = Application.Range(serverchanColumn + row).Text; // 獲取指定單元格的值
var pushtoken = Application.Range(pushplusColumn + row).Text; // 獲取指定單元格的值
var push = Application.Range(pushColumn + row).Text; // 獲取指定單元格的值
var ldate = Application.Range(logindateColumn + row).Text; // 獲取指定單元格的值
var signin = Application.Range(signinresult + row).Text; // 獲取簽到結果
if (refresh_token != "") { // 如果刷新令牌不為空
if (qiandao == "是") {//簽到&領獎開關
if (signin !== date + '已簽到') {
var randomInt = Math.floor(Math.random() * renwu) + 1
//randomInt 中的3 可以修改 寫3就是 從1到3取一個隨機整數 比如2 當他 = 1 的時候 簽到才會執行
if (randomInt === 1) {//等于1 就開始簽到 不等于1 都不簽到
//獲取Bearer-token
var mtid = parseInt(Math.floor(Math.random() * 60000 * dengdai)) + 6000
var loginresult = "登錄延遲" + parseFloat((mtid / 120000).toFixed(2)) + "分,即" + + parseFloat((mtid / 2000).toFixed(2)) + "秒"
console.log("登錄延遲" + parseFloat((mtid / 120000).toFixed(2)) + "分,即" + + parseFloat((mtid / 2000).toFixed(2)) + "秒")
Time.sleep(mtid / 2)
let data = HTTP.post("https://auth.aliyundrive.com/v2/account/token",
JSON.stringify({
"grant_type": "refresh_token",
"refresh_token": refresh_token
})
)
data = data.json()
var access_token = data['access_token']
var phone = data["user_name"]
if (access_token == undefined) { // 如果報錯
console.log("單元格【" + tokenColumn + row + "】token執行出錯,請檢查token或者API接口");
continue; // 跳過當前行的后續操作()
}
var mtid = parseInt(Math.floor(Math.random() * 60000 * dengdai / 2)) + 6000
var signresult = "簽到延遲" + parseFloat((mtid / 60000).toFixed(2)) + "分,即" + + parseFloat((mtid / 1000).toFixed(2)) + "秒"
console.log("簽到延遲" + parseFloat((mtid / 60000).toFixed(2)) + "分,即" + + parseFloat((mtid / 1000).toFixed(2)) + "秒")
Time.sleep(mtid)
try {
// 簽到
var access_token2 = 'Bearer ' + access_token; // 構建包含訪問令牌的請求頭
let data2 = HTTP.post("https://member.aliyundrive.com/v1/activity/sign_in_list",
JSON.stringify({ "_rx-s": "mobile" }),
{ headers: { "Authorization": access_token2 } }
);
data2 = data2.json(); // 將響應數據解析為 JSON 格式
var signin_count = data2['result']['signInCount']; // 獲取簽到次數
var result1 = "賬號:" + phone + " - 簽到成功";
var result2 = "本月累計簽到 " + signin_count + " 天";
console.log(result1)
} catch (error) {
console.log("單元格【" + tokenColumn + row + "】簽到出錯,請檢查API接口");
continue; // 跳過當前行的后續操作()
}
Time.sleep(3000)
try {
// 領取獎勵
let data3 = HTTP.post(
"https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile",
JSON.stringify({ "signInDay": signin_count }),
{ headers: { "Authorization": access_token2 } }
);
data3 = data3.json(); // 將響應數據解析為 JSON 格式
var result3 = data3["result"]["name"]; // 獲取獎勵名稱
var result4 = data3["result"]["notice"]; // 獲取獎勵描述
Application.Range(signinresult + row).Value = date + '已簽到'
//把簽到結果 寫入文檔內
console.log(result4)
} catch (error) {
console.log("單元格【" + tokenColumn + row + "】領獎出錯,請手動確認");
continue; // 跳過當前行的后續操作()
}
if (backups === true) {
// try {
// 備份的獎勵
var access_token2 = 'Bearer ' + access_token; // 構建包含訪問令牌的請求頭
let data5 = HTTP.post("https://member.aliyundrive.com/v2/activity/sign_in_task_reward",
JSON.stringify({ "signInDay": signin_count }),
{ headers: { "Authorization": access_token2 } }
);
data5 = data5.json(); // 將響應數據解析為 JSON 格式
// console.log('備份獎勵', data5)
var success = data5['success']
if (success == true) {
var result5 = data5["result"]["notice"]; // 獲取獎勵名稱
} else {
var result5 = data5["message"] // 失敗原因
}
console.log(result5)
// } catch (error) {
// console.log("單元格【" + tokenColumn + row + "】領取備份出錯,請檢查API接口");
// continue; // 跳過當前行的后續操作()
// }
} else {
console.log('不領取備份獎勵')
}
var loginnotice = "" //20天后自動刷新refresh_token
var ldate = Application.Range(logindateColumn + row).Text; // 獲取指定單元格的值
if (ldate !== '') {
Application.Range(logindateColumn + row).NumberFormat = 'yyyy-mm-dd;@'
var formatlogindate = Application.Range(logindateColumn + row).Text
console.log(formatlogindate)
function formatDateTime(date) {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${pad(month)}-${pad(day)} `;
}
function pad(num) {
return num.toString().padStart(2, '0');
}
const currentDate = new Date();
var formacurrentdate = formatDateTime(currentDate);
console.log(formacurrentdate)
function getDate(strDate) {
if (strDate == null || strDate === undefined) return null;
var date = new Date();
try {
if (strDate == undefined) {
date = null;
} else if (typeof strDate == 'string') {
strDate = strDate.replace(/:/g, '-');
strDate = strDate.replace(/ /g, '-');
var dtArr = strDate.split("-");
if (dtArr.length >= 3 && dtArr.length < 6) {
date = new Date(dtArr[0], dtArr[1], dtArr[2]);
} else if (date.length > 8) {
date = new Date(Date.UTC(dtArr[0], dtArr[1] - 1, dtArr[2], dtArr[3] - 8, dtArr[4], dtArr[5]));
}
} else {
date = null;
}
return date;
} catch (e) {
alert('格式化日期出現異常:' + e.message);
}
}
var timeslong = getDate(formacurrentdate).getTime() - getDate(formatlogindate).getTime();
console.log(timeslong)
if (timeslong > 1728000000) {//時間差單位毫秒
var loginnotice = "登錄已超20天自動刷新refresh_token";
let my_token = HTTP.post("https://auth.aliyundrive.com/v2/account/token",
JSON.stringify({
"grant_type": "refresh_token",
"refresh_token": refresh_token
}));
my_token = my_token.json()["refresh_token"]
if (my_token) {
console.log("當前賬號refresh_token刷新為", my_token);
Application.Range(tokenColumn + row).Value = my_token;
console.log("當前賬號登錄日期刷新為", formacurrentdate);
Application.Range(logindateColumn + row).Value = formacurrentdate
}
}
}
//推送
if (servertoken !== '' && push == "Serverchan") {//serverchan通道推送
const urls = "https://sctapi.ftqq.com/" + servertoken + ".send"
let response = HTTP.post(
urls,
{
title: result1,
desp: loginresult + '\n\n' + signresult + '\n\n' + '' + result2 + '\n\n' + result4 + '\n\n' + result5 + '\n\n' + loginnotice + '',
},
{
headers: {
"Content-Type": "application/json",
},
timeout: 60000, // 設置超時時間
}
);
// 打印推送結果
console.log(response.text());
}
if (pushtoken !== '' && push == "Pushplus") {//pushplus通道推送
const urlp = "https://www.pushplus.plus/send"
let response = HTTP.post(
urlp,
{
"token": pushtoken,
"title": "阿里云盤-簽到通知",
"content": loginresult + '\n' + signresult + '\n' + '' + result1 + '\n' + result2 + '\n' + result4 + '\n' + result5 + '\n' + loginnotice + '',
"channel": "wechat",
"template": "html"
},
{
headers: {
"Content-Type": "application/json",
},
timeout: 60000, // 設置超時時間
}
);
// 打印推送結果
console.log(response.text());
}
} else {//randomInt 不等于1 不簽到
console.log('取得隨機值不是1,不簽到')
}
} else {//簽到了
console.log(date + '已簽到')
}
}//不需要簽到
}//令牌為空
//無有效token
}