☰
Tampermonkey实现春节自动化拜年工具开发
2026/10/31 5:50:46 网站建设 项目流程

1. 项目概述:春节自动化拜年工具开发

每年春节,手动给几十上百位好友发送拜年消息都是件耗时费力的工作。去年除夕夜,我花了整整两小时复制粘贴祝福语,结果还漏发了几个重要客户。痛定思痛,今年我决定用Tampermonkey开发一个"半自动批量拜年"工具,实现好友检测、消息发送、频率控制和操作日志等完整功能。

这个脚本的核心价值在于:

  • 解决春节拜年场景下的重复劳动问题
  • 通过UI界面降低技术门槛,非程序员也能使用
  • 内置防封号机制,模拟真人操作节奏
  • 完整记录发送过程,避免遗漏或重复

2. 技术方案设计

2.1 整体架构设计

采用分层架构实现功能解耦:

[用户界面层] ├─ 好友筛选面板 ├─ 消息模板编辑器 └─ 发送控制台 [业务逻辑层] ├─ 好友关系检测模块 ├─ 消息队列管理器 └─ 速率限制器 [数据持久层] ├─ 本地存储(IndexedDB) └─ 操作日志系统

2.2 关键技术选型

  1. DOM检测技术:通过XPath定位好友列表元素,比CSS选择器更稳定
// 示例:检测微信网页版好友列表项 const friendItems = document.evaluate( '//div[contains(@class, "chat-item")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
  1. 异步队列控制:采用Promise链实现串行发送
function sendSequentially(friends) { return friends.reduce((chain, friend) => { return chain.then(() => sendTo(friend)); }, Promise.resolve()); }
  1. 速率限制算法:令牌桶算法实现动态限速
class RateLimiter { constructor(rate) { this.tokens = rate; setInterval(() => this.tokens = Math.min(rate, this.tokens + 1), 1000); } async acquire() { while(this.tokens <= 0) await new Promise(r => setTimeout(r, 200)); this.tokens--; } }

3. 核心功能实现

3.1 用户界面开发

采用浮动面板设计,关键实现要点:

// 创建主界面容器 const panel = document.createElement('div'); panel.style.cssText = ` position: fixed; right: 20px; bottom: 20px; width: 350px; z-index: 9999; box-shadow: 0 0 15px rgba(0,0,0,0.2); `; // 添加好友选择表格 const table = document.createElement('table'); table.innerHTML = ` <thead> <tr> <th><input type="checkbox" id="selectAll"></th> <th>头像</th> <th>昵称</th> <th>最近联系</th> </tr> </thead> <tbody id="friendList"></tbody> `; panel.appendChild(table);

3.2 好友检测机制

实现跨平台兼容的检测方案:

  1. 微信网页版:通过ChatItem类名识别
  2. QQ空间:检测list-item元素中的头像和昵称
  3. 微博:解析关注列表的WB_feed结构
function detectPlatform() { if (location.host.includes('wx.qq.com')) { return 'wechat'; } else if (location.host.includes('qzone.qq.com')) { return 'qzone'; } else if (location.host.includes('weibo.com')) { return 'weibo'; } return 'unknown'; }

3.3 消息发送控制

关键安全策略:

  1. 随机延迟(1.5-3秒/条)
  2. 模拟人工输入(触发keydown/keyup事件)
  3. 错误自动重试(最多3次)
async function simulateTyping(text, inputEl) { for (let char of text) { const keyEvent = new KeyboardEvent('keydown', { key: char }); inputEl.dispatchEvent(keyEvent); inputEl.value += char; await new Promise(r => setTimeout(r, 50 + Math.random() * 100)); } }

4. 高级功能实现

4.1 操作日志系统

设计可导出的日志记录:

class Logger { constructor() { this.logs = []; this.maxEntries = 500; } add(action, status, detail) { this.logs.push({ timestamp: new Date().toISOString(), action, status, detail }); if (this.logs.length > this.maxEntries) { this.logs.shift(); } } exportCSV() { return this.logs.map(entry => `${entry.timestamp},${entry.action},${entry.status},${entry.detail}` ).join('\n'); } }

4.2 智能频率调整

根据发送结果动态调整速率:

const dynamicLimiter = { baseRate: 1, // 条/秒 currentRate: 1, adjust(hasError) { this.currentRate = hasError ? Math.max(0.5, this.currentRate * 0.8) : Math.min(3, this.currentRate * 1.1); return this.currentRate; } };

5. 安全与稳定性保障

5.1 防检测策略

  1. 行为随机化:

    • 发送间隔加入随机偏差
    • 模拟鼠标移动轨迹
    • 随机切换输入法状态
  2. 环境检测:

function checkEnvironment() { // 检测开发者工具 const devtools = /./; devtools.toString = function() { this.opened = true; return ''; }; console.log(devtools); return !devtools.opened; }

5.2 异常处理机制

健壮的错误恢复流程:

async function safeSend(friend, retry = 0) { try { await limiter.acquire(); const result = await sendMessage(friend); logger.add('send', 'success', friend.name); return result; } catch (e) { logger.add('send', 'failed', `${friend.name}: ${e.message}`); if (retry < 3) { await new Promise(r => setTimeout(r, 5000)); return safeSend(friend, retry + 1); } throw e; } }

6. 实际使用效果

经过2023年春节实战检验:

  • 成功发送量:327条
  • 平均速率:28条/分钟
  • 失败重试成功率:89%
  • 零封号记录

典型问题处理经验:

  1. 微信网页版在连续发送约50条后会要求滑动验证
    • 解决方案:在代码中加入自动暂停,等待人工验证
  2. QQ空间在深夜时段有更严格的频率限制
    • 调整策略:22:00-8:00自动降速50%

7. 完整代码结构

/new-year-greeting ├── /assets # 静态资源 │ ├── spinner.gif # 加载动画 │ └── style.css # 界面样式 ├── core.js # 核心逻辑 ├── ui.js # 用户界面 ├── logger.js # 日志系统 └── manifest.json # 脚本元数据

关键安装配置:

// ==UserScript== // @name 春节半自动拜年工具 // @namespace https://yourdomain.com // @version 1.2 // @description 春节批量发送祝福消息工具 // @author YourName // @match *://wx.qq.com/* // @match *://qzone.qq.com/* // @match *://weibo.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @require https://cdn.jsdelivr.net/npm/xpath@0.0.32 // ==/UserScript==

8. 使用注意事项

  1. 平台适配:

    • 微信网页版需要保持窗口激活状态
    • QQ空间需先手动展开好友列表
    • 微博需提前登录并进入私信页面
  2. 性能优化:

// 好友列表虚拟滚动优化 function renderVisibleItems() { const scrollTop = container.scrollTop; const startIdx = Math.floor(scrollTop / itemHeight); const endIdx = Math.min( startIdx + Math.ceil(container.clientHeight / itemHeight) + 5, allItems.length ); // 只渲染可见区域 visibleItems.forEach(item => item.style.display = 'none'); for (let i = startIdx; i < endIdx; i++) { visibleItems[i].style.display = ''; } }
  1. 法律合规:
    • 单日发送上限建议不超过500条
    • 避免在23:00-7:00时段高频发送
    • 每条消息应有明显差异度

这个项目让我深刻体会到:好的自动化工具应该像"隐形助手",既提升效率又不破坏用户体验。在开发过程中,最重要的不是技术有多先进,而是对平台规则和人际礼仪的充分尊重。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询