淘米自动签到脚本
一、功能概览
本脚本专为淘米网站 (mifan.61.com
) 设计,实现自动化每日签到。核心功能包括:
- 🕒 定时执行:通过
@crontab 0 9 * * *
实现每日 9 点自动运行 - 🔐 身份认证:支持
withCredentials: true
带上登录态,自动完成身份验证 - 📊 数据持久化:利用
GM_setValue
存储签到记录及响应数据 - 🔔 通知提醒:基于
GM_notification
发送桌面通知,反馈签到动态 - 🛡️ 异常处理:涵盖网络异常、响应数据解析及接口错误,支持重试机制增强稳定性
- 📈 数据可视化:支持签到历史动态展示图表,提升用户体验
- 🔒 安全加固:可选请求签名功能,提升请求安全性
二、核心代码详解
1. 请求头伪装
const headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Accept-Encoding': 'gzip, deflate, br','Connection': 'keep-alive','Content-Type': 'application/json','Origin': 'https://mifan.61.com','Referer': 'https://mifan.61.com/','X-Requested-With': 'XMLHttpRequest'
};
- 模拟主流浏览器请求,防止被反爬拦截。
- 严格匹配
Origin
和Referer
,确保请求合法。 - 明确声明
Content-Type
为application/json
。
2. 重试机制融合的签到请求逻辑
通过重试机制提升脚本稳定性,出错时自动尝试多次请求,最大化签到成功率。
let retryCount = 0;
const maxRetries = 3;function performCheckIn() {return new Promise((resolve, reject) => {function executeRequest() {GM_xmlhttpRequest({method: 'POST',url: 'https://mifan.61.com/api/v1/event/dailysign/',headers,data: JSON.stringify({}),withCredentials: true,onload: function(response) {try {const data = JSON.parse(response.responseText);const currentDate = new Date().toLocaleDateString('zh-CN');if (response.status === 200) {let successMsg = `淘米签到成功!日期:${currentDate}`;if (data.message) successMsg += ` - ${data.message}`;if (data.data && data.data.reward) successMsg += ` - 获得奖励:${data.data.reward}`;console.log('签到成功:', data);// 数据持久化GM_setValue('lastCheckInDate', currentDate);GM_setValue('lastCheckInTime', new Date().toLocaleString('zh-CN'));GM_setValue('lastResponse', JSON.stringify(data));GM_notification({title: '淘米自动签到成功',text: successMsg,timeout: 5000,onclick: () => window.open('https://mifan.61.com/', '_blank')});resolve();} else {const errorMsg = data.message || `签到失败,状态码:${response.status}`;console.error('签到失败:', response);GM_notification({ title: '淘米自动签到失败', text: errorMsg, timeout: 5000 });reject(new Error(errorMsg));}} catch (e) {const errorMsg = `解析响应数据失败:${e.message}`;console.error(errorMsg);GM_notification({ title: '淘米自动签到失败', text: errorMsg, timeout: 5000 });reject(new Error(errorMsg));}},onerror: function(error) {if (retryCount < maxRetries) {retryCount++;console.log(`请求失败,第${retryCount}次重试...`);setTimeout(executeRequest, 2000);} else {const errorMsg = `网络请求失败:${error}`;console.error(errorMsg);GM_notification({ title: '淘米自动签到失败', text: errorMsg, timeout: 5000 });reject(error);}}});}executeRequest();});
}
- 通过计数控制重试次数,失败后间隔2秒自动尝试。
- 所有错误均有详细日志及通知反馈,确保易于排查。
3. 签到历史数据可视化
function renderCheckinHistory() {const history = GM_getValue('checkinHistory', []);const chartData = history.map(entry => ({date: entry.date,reward: entry.reward || 0,status: entry.status || '成功'}));const ctx = document.getElementById('checkinChart').getContext('2d');new Chart(ctx, {type: 'bar',data: {labels: chartData.map(d => d.date),datasets: [{label: '每日奖励',data: chartData.map(d => d.reward),backgroundColor: 'rgba(75, 192, 192, 0.4)',borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 1}]},options: {scales: { y: { beginAtZero: true } }}});
}
- 读取持久化签到历史,实现动态奖励数据展示。
- 采用 Chart.js 生成图表,支持直观查看签到成果。
4. 可选安全加固:请求签名
const generateSignature = (data, secret) => {const hmac = CryptoJS.HmacSHA256(JSON.stringify(data), secret);return CryptoJS.enc.Base64.stringify(hmac);
};const timestamp = Date.now();
const nonce = Math.random().toString(36).substring(2, 15);
const signature = generateSignature({ timestamp, nonce, path: '/api/v1/event/dailysign/' }, 'your_secret_key');headers['X-Timestamp'] = timestamp;
headers['X-Nonce'] = nonce;
headers['X-Signature'] = signature;
- 通过 HMAC-SHA256 签名保证请求完整性与防篡改。
- 需要服务端配合校验,提升安全防护等级。
三、架构流程图
- 网络请求失败自动重试,直到达到重试上限。
- 状态码非200和 JSON 解析异常同样触发失败通知。
- 成功路径执行数据保存与通知,确保用户获知签到状态。
四、部署与使用指南
安装步骤
- 在 Chrome/Firefox 浏览器安装 Tampermonkey 或 Violentmonkey。
- 创建新用户脚本,粘贴完整代码。
- 登录淘米网站,保证处于登录状态。
- 脚本自动执行且每天 9:00 定时签到。
典型脚本框架示例
// ==UserScript==
// @name 淘米自动签到
// @namespace http://tampermonkey.net/
// @version 1.1
// @description 每日自动领取淘米超拉和金豆奖励
// @match https://mifan.61.com/*
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_registerMenuCommand
// @crontab 0 9 * * *
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @require https://cdn.jsdelivr.net/npm/chart.js@3.7.0/dist/chart.min.js
// ==/UserScript==(function() {'use strict';GM_registerMenuCommand("查看签到历史", () => {renderCheckinHistory();});performCheckIn().catch(console.error);// 如果兼容 crontab 插件,可以用它定时执行if (typeof crontab !== 'undefined') {crontab('0 9 * * *', performCheckIn);}
})();
五、总结
本脚本集成了:
- 跨域身份验证及接口调用
- 丰富健壮的异常处理与重试机制
- 签到状态持久化与桌面通知
- 签到数据可视化历史追踪
- 可选的请求安全加固
适用范围广泛,此框架可轻松移植改造为其他网站自动签到工具,快速适配不同API和业务场景。
仅供学习参考,欢迎交流!