掘金自动签到
原创大约 8 分钟掘金自动签到
🚀 掘金自动签到完全指南
本指南将带你完成从 油猴脚本 到 Windows 定时任务
的全自动签到系统搭建,让你每天无需手动操作,系统自动模拟真人行为完成掘金签到。
📌 目录
🎯 项目概述
| 组件 | 作用 | 技术 |
|---|---|---|
| 油猴脚本 | 在掘金签到页面自动点击签到按钮,模拟人类操作 | JavaScript, Tampermonkey API |
| Windows 定时任务 | 每天指定时间自动打开浏览器访问签到页 | Windows 任务计划程序 |
整套方案每天定时运行,无需人工干预,且脚本内置人机模拟、状态检测等逻辑,确保稳定、安全。
🖥️ 油猴脚本(核心)
脚本代码
// ==UserScript==
// @name 掘金签到按钮自动点击(人机模拟版 增强)
// @namespace http://tampermonkey.net/
// @version 1.3
// @description 兼容已签到和未签到两种状态,模拟真人点击,避免超时
// @author You
// @match https://juejin.cn/user/center/signin?from=sign_in_menu_bar
// @grant none
// @run-at document-idle
// ==/UserScript==
(function () {
"use strict";
// ---------- 工具函数:随机延迟 ----------
function randomDelay(min = 1000, max = 5000) {
return new Promise((resolve) => {
const delay = Math.floor(Math.random() * (max - min + 1)) + min;
setTimeout(resolve, delay);
});
}
// ---------- 等待元素出现(MutationObserver + 超时) ----------
function waitForElement(selector, timeout = 30000) {
return new Promise((resolve, reject) => {
// 如果元素已存在,直接返回
const existing = document.querySelector(selector);
if (existing) {
resolve(existing);
return;
}
let timer;
const observer = new MutationObserver(() => {
const el = document.querySelector(selector);
if (el) {
clearTimeout(timer);
observer.disconnect();
resolve(el);
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: false
});
timer = setTimeout(() => {
observer.disconnect();
reject(new Error("等待超时"));
}, timeout);
});
}
// ---------- 模拟真实鼠标点击 ----------
function simulateHumanClick(element) {
if (!element) return;
// 平滑滚动到按钮中央
element.scrollIntoView({ behavior: "smooth", block: "center" });
const rect = element.getBoundingClientRect();
// 点击坐标在按钮范围内随机偏移 ±5px
const x = rect.left + rect.width / 2 + (Math.random() - 0.5) * 10;
const y = rect.top + rect.height / 2 + (Math.random() - 0.5) * 10;
// 触发完整的鼠标事件序列
const events = ["mouseover", "mousedown", "mouseup", "click"];
events.forEach((type) => {
const event = new MouseEvent(type, {
view: window,
bubbles: true,
cancelable: true,
clientX: x,
clientY: y,
screenX: window.screenX + x,
screenY: window.screenY + y,
button: 0,
buttons: type === "mousedown" ? 1 : 0
});
element.dispatchEvent(event);
// 在 mousedown 和 mouseup 之间模拟人类反应延迟(10~30ms)
if (type === "mousedown") {
const wait = Math.random() * 20 + 10;
const start = Date.now();
while (Date.now() - start < wait) {}
}
});
console.log("🖱️ 模拟点击完成");
}
// ---------- 主流程 ----------
async function main() {
try {
// 确保页面完全加载
if (document.readyState !== "complete") {
await new Promise((resolve) => window.addEventListener("load", resolve));
}
// 优先检查是否已经签到(避免无谓等待)
const signedBtn = document.querySelector(".signedin.btn");
if (signedBtn) {
console.log("✅ 今日已签到,无需操作");
return;
}
// 等待未签到按钮出现(最长 30 秒)
const btn = await waitForElement(".signin.btn", 30000);
console.log("🔍 找到签到按钮");
// 再次校验文本(安全防护)
if (btn.textContent.trim().includes("已签到")) {
console.log("✅ 今日已签到,无需操作");
return;
}
// 随机等待 1~5 秒,模拟人类阅读行为
await randomDelay(1000, 5000);
// 执行真人化点击
simulateHumanClick(btn);
console.log("✅ 签到操作已执行");
} catch (err) {
console.warn("⚠️ 签到失败:", err.message);
}
}
// 启动脚本
main();
})();
详细解读
1️⃣ 核心设计思路
- 状态感知:脚本首先检查是否存在
signedin类(表示已签到),若存在则直接退出,避免无效等待。 - 动态等待:使用
MutationObserver监听 DOM 变化,一旦签到按钮(signin类)出现立即响应,比轮询更高效、更及时。 - 人机模拟:点击前随机延迟、平滑滚动、坐标微调、完整事件链,降低被识别为机器人的风险。
2️⃣ 关键函数说明
| 函数 | 作用 |
|---|---|
randomDelay(min, max) | 返回一个在指定范围内的随机延迟 Promise,用于模拟人类思考时间。 |
waitForElement(selector, timeout) | 使用 MutationObserver 监听元素出现,若超时则 reject。 |
simulateHumanClick(element) | 模拟真实鼠标点击:滚动、计算随机坐标、依次触发 mouseover → mousedown → mouseup → click,并在 mousedown 后加入微小阻塞延迟。 |
main() | 异步主流程,按顺序执行状态检测、元素等待、随机延迟、点击操作。 |
3️⃣ 兼容性处理
- 已签到状态:直接匹配
.signedin.btn,立即返回。 - 未签到状态:匹配
.signin.btn,执行点击。 - 双重校验:即使通过类名匹配,仍检查按钮文本是否包含“已签到”,确保万无一失。
4️⃣ 安全性说明
- 使用
@grant none,不申请额外权限,仅操作当前页面 DOM。 - 所有事件均通过标准
MouseEvent构造,不篡改网页原生逻辑。 - 添加随机延迟和坐标偏移,模拟人类操作特征,减少账号风险。
⏰ Windows 定时任务
创建任务
在 管理员命令提示符 中执行以下命令,创建一个名为“掘金自动签到助手”的每日定时任务。
schtasks /create /tn "掘金自动签到助手" /tr "\"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe\" https://juejin.cn/user/center/signin?from=sign_in_menu_bar" /sc daily /st 07:49:30 /ru "HX\18421"
| 参数 | 说明 |
|---|---|
/tn | 任务名称(中文,带引号) |
/tr | 要执行的命令:Edge 浏览器路径 + 签到页 URL(路径含空格需用 \" 包裹) |
/sc daily | 每天触发一次 |
/st 07:49:30 | 开始时间(24小时制,可自行修改) |
/ru | 运行任务的用户账户(通过 whoami 可查看当前用户名) |
⚠️ 如果 Edge 安装路径不同,请修改为你的实际路径(常见为
C:\Program Files\Microsoft\Edge\Application\msedge.exe)。
管理任务
| 操作 | 命令 |
|---|---|
| 查看任务详情 | schtasks /query /tn "掘金自动签到助手" /fo LIST /v |
| 修改开始时间(如改为 08:00) | schtasks /change /tn "掘金自动签到助手" /st 08:00 |
| 手动运行一次 | schtasks /run /tn "掘金自动签到助手" |
| 删除任务 | schtasks /delete /tn "掘金自动签到助手" /f |
图形界面操作(可选)
- 按下
Win + R,输入taskschd.msc打开“任务计划程序”。 - 在左侧导航栏点击“任务计划程序库”,右侧列表中找到“掘金自动签到助手”。
- 右键点击任务,可进行 属性修改、运行、禁用、导出 等操作。
🔧 安装与使用
1. 安装油猴脚本
- 确保浏览器已安装 Tampermonkey 或 Violentmonkey
扩展。 - 点击扩展图标 → “添加新脚本” → 将上述脚本代码粘贴覆盖 → 保存(Ctrl+S)。
2. 配置定时任务
- 以管理员身份打开命令提示符,执行上述创建命令(根据实际路径和用户名调整)。
- 可通过
schtasks /query /tn "掘金自动签到助手"验证是否创建成功。
3. 测试运行
- 手动测试脚本:直接打开
https://juejin.cn/user/center/signin?from=sign_in_menu_bar,观察控制台日志(F12),确认脚本正常工作。 - 测试定时任务:在任务计划程序中右键点击任务 → “运行”,观察是否自动打开浏览器并跳转到签到页。
4. 自动运行
- 每天到达设定时间,Windows 会自动启动 Edge 并访问签到页,油猴脚本随即执行签到。
- 签到完成后,浏览器窗口会保持打开(可手动关闭),建议保持浏览器已登录掘金账号。
❓ 常见问题
Q1: 脚本提示“等待超时”怎么办?
- 可能是网络较慢或页面加载过久,脚本已设置 30 秒超时,通常足够。
- 如果频繁超时,可尝试提高超时时间(修改
waitForElement的timeout参数)。 - 确保浏览器已登录掘金,否则页面会跳转到登录页,按钮不会出现。
Q2: 如何修改签到时间?
- 使用命令
schtasks /change /tn "掘金自动签到助手" /st HH:MM修改开始时间。 - 或在任务计划程序图形界面中右键 → 属性 → 触发器 → 编辑时间。
Q3: 签到按钮变化了怎么办?
- 掘金可能更新页面结构,若
.signin.btn或.signedin.btn失效,需更新脚本中的选择器。 - 打开页面,使用 F12 检查元素,找到正确的类名,替换脚本中的对应选择器即可。
Q4: 能否让浏览器在后台运行不弹窗?
- 可以通过修改任务动作为启动 Edge 的“后台模式”,但需要额外参数(如
--headless或--background),但此类模式可能不支持扩展脚本运行,建议保持默认。 - 或者使用
-new-window参数,但依然会弹出窗口。
Q5: 任务运行后浏览器关闭了,签到成功了吗?
- 签到操作在页面打开后由脚本自动完成,通常只需几秒,之后浏览器可手动关闭。
- 可访问掘金签到页查看是否显示“今日已签到”来确认。
📝 总结
通过这套方案,你实现了:
- ✅ 零手动操作:每天定时自动签到。
- ✅ 拟人化行为:模拟鼠标、延迟、滚动,降低风险。
- ✅ 稳定可靠:状态检测、异常处理,确保脚本健壮。
- ✅ 灵活可控:随时修改时间、脚本逻辑,适应网站变化。
现在,你只需一次配置,即可长期享受自动签到的便利。如有任何问题,欢迎随时反馈!🎉
