免费的 IDE+PaaS!
前言
作者之前弄了个 Goorm IDE 的小 Docker 容器,跑一些东西玩玩。
可是问题来了,免费计划不提供 Always Online!
建站基本无望,当个 demo 就没意思了。
于是乎我开始研究挂机的方法。之前有部分大佬试过,必须在 IDE 内持续在线,实例才会在线。
此后我就准备写一个挂机脚本,其原理是在 GoormIDE 的运行中开一个 selenium 实例,就可以做到挂机 Always Online。
注意:不要泛用,小心号没。
一、教程
脚本使用 Python 编写,如果使用其他语言,建议打包为可执行文件后间接执行挂机脚本(主程序请自行编写)。
安装 selenium 和 PhantomJS。
pip install selenium
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar -xjf phantomjs-2.1.1-linux-x86_64.tar.bz2
rm -rf phantomjs-2.1.1-linux-x86_64.tar.bz2
rename phantomjs-2.1.1-linux-x86_64 phantomjs
新建guaji.py,复制以下代码入内。
# GoormIDE挂机脚本
# 假装在IDE,容器Always online
# -----------
# Ver1.0 by XHG78999
# 暂时没有测试内存占用等,请自行斟酌,当心号没
from selenium import webdriver
import time
import random
import os
browser=webdriver.PhantomJS(executable_path="./phantomjs/bin/phantomjs")
browser.implicitly_wait(30)
browser.get("https://accounts.goorm.io/login?return_url=aHR0cHM6Ly9pZGUuZ29vcm0uaW8vbXkvZGFzaGJvYXJkP3JlZGlyZWN0PTE=")
browser.set_window_size(1920,1080)
browser.find_element_by_name("email").send_keys(os.environ["DASHBOARD_USERNAME"])
browser.find_element_by_name("password").send_keys(os.environ["DASHBOARD_PASSWORD"])
browser.find_element_by_class("btn-primary").click()
browser.find_element_by_class("btn-outline-primary").click()
while True:
browser.execute(webdriver.remote.command.Command.MOVE_TO,{
"xoffset":random.randint(0,1920),
"yoffset":random.randint(0,1080)
})
time.sleep(random.randint(0,10))
然后在主程序入口(默认为index.py)改为以下内容:
# GoormIDE 挂机脚本主程序
# 主进程启动主程序,子进程启动挂机
from multiprocessing import Process
def launch_guaji():
import guaji
pr_guaji=Process(target=launch_guaji,args=())
# 用import方式启动真正的主程序,请按照自己项目要求自行添加
运行前请设定环境变量DASHBOARD_USERNAME登录邮箱DASHBOARD_PASSWORD登陆密码,然后在主 session 内只需要启动修改过的主程序即可。
二、资源
实测几乎不占用任何内存,CPU 使用量几乎为零,可以当作无事发生。
三、挂机原理
站在巨人的肩膀上。
有大佬之前发现 GoormIDE 的在线判断标准是在 Online IDE 上活动(shell 会定时刷新),同时 IDE 的一个账号可以同时在多个终端上登录。
我们使用 Selenium 自动化测试,自动登录账号进入 IDE,然后开始挂机。为了防止长时间不活动被强制退出,我们间隔几秒便会~乱动~鼠标,假装自己在 IDE 上活动。
这样就可以间接做到 Always Online 了。
总结
这是目前唯一一个有效的挂机方法,从此就可以无忧无虑的使用 GoormIDE 啦!
再次提醒:不要泛用,小心号没。