如何用JavaScript实现Google Colab保活:定时点击与间隔设置
解决Google Colab长时间保持活跃的问题
嘿,我来帮你搞定Colab防止进程中断的需求!你的思路没问题,但原来的代码因为所有setTimeout几乎同时触发,所以点击完全没间隔。下面给你两种靠谱的实现方案:
方案一:改进版Colab运行按钮定时点击
先算好总次数:12小时=720分钟,每20分钟点击一次,总共需要720/20=36次。我们用递归函数实现每次点击后延迟指定时间再执行下一次,完美模拟Python中time.sleep()的效果:
// 获取所有运行按钮 const runButtons = document.getElementsByTagName('colab-run-button'); if (runButtons.length === 0) { console.log("没找到可点击的运行按钮!"); } else { const targetButton = runButtons[runButtons.length - 1]; // 取最后一个按钮 const intervalMinutes = 20; // 间隔时间(分钟) const totalHours = 12; // 总时长 const totalClicks = Math.floor(totalHours * 60 / intervalMinutes); // 总点击次数 let clickCount = 0; function clickButtonPeriodically() { if (clickCount >= totalClicks) { console.log("定时点击任务已完成!"); return; } targetButton.click(); clickCount++; console.log(`已点击第${clickCount}次,下次点击将在${intervalMinutes}分钟后`); // 计算延迟时间(毫秒):分钟*60秒*1000毫秒 setTimeout(clickButtonPeriodically, intervalMinutes * 60 * 1000); } // 启动任务 clickButtonPeriodically(); }
这段代码的优势:
- 每次点击后才触发下一次延迟,不会出现所有点击同时执行的问题
- 自动计算总点击次数,到点自动停止
- 有日志输出,方便你跟踪进度
方案二:通用鼠标点击/滚动保持活跃(更推荐)
如果担心按钮元素找不到或者失效,直接模拟鼠标点击或页面滚动是更通用的方案——Colab判断活跃的依据是用户是否有交互操作,只要每隔一段时间触发一次交互就行。下面的代码会每隔15分钟在当前鼠标位置点击一次,同时随机滚动页面(不影响你后续的鼠标操作),持续12小时:
const intervalMinutes = 15; // 间隔时间(分钟) const totalHours = 12; const totalCycles = Math.floor(totalHours * 60 / intervalMinutes); let cycleCount = 0; function keepActive() { if (cycleCount >= totalCycles) { console.log("保持活跃任务已结束!"); return; } // 1. 模拟鼠标在当前位置点击一次 const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true, view: window }); document.elementFromPoint(window.screenX, window.screenY).dispatchEvent(clickEvent); // 2. 随机滚动页面一点(可选,增强活跃效果) const scrollAmount = Math.floor(Math.random() * 100) - 50; // 上下随机滚动-50到50像素 window.scrollBy(0, scrollAmount); cycleCount++; console.log(`已完成第${cycleCount}次活跃操作,下次将在${intervalMinutes}分钟后`); setTimeout(keepActive, intervalMinutes * 60 * 1000); } // 启动任务 keepActive();
注意事项:
- 代码需要在浏览器控制台运行(Colab页面按F12打开开发者工具,切换到Console标签)
- 运行代码后不要关闭浏览器标签页,也不要让浏览器进入睡眠模式(可以设置浏览器不自动睡眠)
- 如果需要提前停止任务,刷新页面即可
内容的提问来源于stack exchange,提问作者Deshwal
相关产品推荐
相关产品推荐

