使 colab 保持活跃

让 colab 保存活跃

当前为 2024-01-13 提交的版本,查看 最新版本

// ==UserScript==
// @name         colab 保持活跃自动重连 / make colab keep alive
// @name:zh      colab 保持活跃自动重连
// @name:en      colab keep alive
// @name:zh-CN   使 colab 保持活跃
// @name:ja      colab アクティブに保存
// @namespace    https://colab.research.google.com
// @version      1.0
// @description:zh  让colab保持活跃,自动检查是否掉线,掉线后自动重连,去掉谷歌人机校验
// @description:en  make colab keep alive
// @description:zh-CN   让 colab 保存活跃
// @description:ja   Google colab アクティブに保存
// @author       木木(mumu)
// @match        *://colab.research.google.com/*
// @grant        none
// @license       MIT
// @description make colab keep alive
// ==/UserScript==
var nameSpace = 'mumu-'

// 是否开启保持活跃功能,默认开启
var isActive = true;
var timeout = 1000 * 60 * 5  // 默认5分钟检查一次连接状态
var timer = null

// 向页面添加功能按钮,默认开启保持活跃功能
function setButton () {
  // 创建 button 元素
  var button = document.createElement('button');
  button.id = nameSpace + 'floating-button';
  button.innerText = '保持活跃';
  button.className = nameSpace + 'active'

  // 创建 style 标签,设置样式
  var style = document.createElement('style');
  style.innerHTML = `
    #${nameSpace}floating-button {
      position: fixed;
      bottom: 20px;
      right: 20px;
      width: 75px;
      height: 35px;
      background-color: #e07171;
      color: #fff;
      border-radius: 8px;
      text-align: center;
      line-height: 20px;
      cursor: pointer;
      border: none;
      z-index: 999;
    }

    #${nameSpace}floating-button.${nameSpace}active {
      background-color: #007bff;
    }
  `;

  document.body.appendChild(button);
  document.head.appendChild(style);
  console.log("添加完成")

  button.addEventListener('mousedown', function(event) {
    var offsetX = event.clientX - button.offsetLeft;
    var offsetY = event.clientY - button.offsetTop;

    function moveButton(event) {
        button.style.left = (event.clientX - offsetX) + 'px';
        button.style.top = (event.clientY - offsetY) + 'px';
    }

    document.addEventListener('mousemove', moveButton);

    button.addEventListener('mouseup', function() {
        document.removeEventListener('mousemove', moveButton);
    });
  });

  button.addEventListener('click', function() {
    isActive = !isActive;
    if (isActive) {
        button.classList.add(nameSpace+'active');
    } else {
        button.classList.remove(nameSpace+'active');
    }
    checkRunningTimerHandle()
  });

  checkRunningTimerHandle()
}

// 去掉谷歌验证
function removeGoogleRecaptcha () {
  document.querySelectorAll('script[src*="recaptcha"]').forEach(el=> {
    el.remove()
  })
  var el = document.querySelector('.grecaptcha-badge')
  if(el) {
    el.remove()
  }
  console.log('去掉谷歌验证')
}

// 检查是否运行中
function checkRunning () {
  var els = document.querySelectorAll('.running')
  if(els.length > 0) {
    return true
  } else {
    console.log('连接已中断')
    return false
  }
}

// 定时运行检查处理函数
function checkRunningTimerHandle () {
  console.log(isActive,timer)
  if(isActive && !timer) {
    timer = setInterval(() => {
      if(!checkRunning()) {
        setActive()
      }
    },timeout)
    setActive()
  } else {
    timer && clearInterval(timer)
  }
}

// 设置事件
function setHandle () {
  document.querySelector('.'+nameSpace+'dialog-close').addEventListener('click',function() {
    document.querySelector('#'+nameSpace+'dialog').style.display = 'none'
  })

  document.querySelector('#'+nameSpace+'add-input').onkeydown=function(ev){
    if(ev.keyCode==13){
      var val = ev.target.value
      addKeyword(val)
      ev.target.value = ''
    }
  }

  document.querySelector('#'+nameSpace+'add-btn').addEventListener('click',function() {
    var textel = document.querySelector('#'+nameSpace+'add-input')
    var val = textel.value
    textel.value = ''
    addKeyword(val)
  })

  var list = document.querySelectorAll('.'+nameSpace+'keyword-del')
  for(let i=0;i<list.length;i++) {
    var el = list[i]
    el.addEventListener('click',function(e) {
      delKeyword(e)
    })
  }
}


// 重新连接
function setActive() {
  // 如果有提示弹窗就关闭
  if(document.querySelector('mwc-button')) {
    document.querySelector('mwc-button').click()
  }
  document.querySelectorAll('colab-run-button').forEach((el) => {
    el.click()
  })
}

window.addEventListener('load', () => {
  if(isActive) {
    setButton()
    // 1分钟后去掉谷歌验证
    setTimeout(() => {
      removeGoogleRecaptcha()
    },1000 * 10)
  }
})

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址