一、前言
博主是一名深大学生,由于drcom经常掉线并且不支持多端登录,导致我有时候需要远程的windows电脑经常掉线、断网,备受困扰!因此写下此脚本,解决我的问题。若是深大drcom的开发者能够看到,希望开发者能够为学生们提供一种支持多端登录或者保持在线的方案吧。也不至于我亲自下手,写个代码~~
目前已经有一个版本,但是该版本需要配合chromedriver才行。此处更新的版本无需配合chromedriver,直接运行可执行程序,就能够使电脑保持在线。该程序秉持开源理念,在下文中提供可执行程序源代码,可由其他开发者自由修改使用。如果只是想使用这个功能,那么可直接下载运行(下文有提供免费下载的链接)。
二、可执行程序
CSDN下载地址:深大Drcom保持在线可执行程序。
百度云下载地址:https://pan.baidu.com/s/1DlgaSpBrDZmYOERpfwCEow,提取码: 6668。
使用方式:在cmd中进入KeepDrcomOL.exe所在目录,在命令行中输入命令"KeepDrcomOL"运行该程序,然后按照cmd窗口的提示,输入用户名、密码,保持该cmd窗口。
三、源代码
实现的思路非常地简单:使用post提交表单在python程序中进行drcom的登录。代码非常少,如下
import requests
import time
import stdiomask
# check whether is connected
def is_connected(url):
try:
# connect success
requests.get(url, timeout=3)
return True
except Exception as e:
# connect fail
print('%s\t%s' % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), e))
return False
# login drcom
def drcom_login(account, password):
drcom_url = 'https://drcom.szu.edu.cn/a70.htm'
drcom_form = {'DDDDD': account,
'upass': password,
'0MKKey': '%B5%C7%A1%A1%C2%BC'}
try:
# login drcom successfully
drcom_res = requests.post(drcom_url, drcom_form)
return drcom_res.status_code
except Exception as e:
# fail to login drcom
print('%s\t%s' % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), e))
return 99404
# main function
def main():
print('********KeepDrcomOL(20220124u) Contributed By SZUCS********')
print('%s\t为了使电脑的外网连接保持在线,请正确输入Dr.COM账户和密码.' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
username = input('%s\t请输入一卡通账号(输入完毕请按回车键):' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
pw_prompt = '%s\t请输入密码(输入完毕请按回车键):' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
password = stdiomask.getpass(prompt=pw_prompt, mask='*')
while True:
# connect if the net is disconnected
if not is_connected('https://www.baidu.com/'):
if username is None and password is None:
username = input('%s\t请输入一卡通账号(输入完毕请按回车键):' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
pw_prompt = '%s\t请输入密码(输入完毕请按回车键):' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
password = stdiomask.getpass(prompt=pw_prompt, mask='*')
code = drcom_login(username, password)
if int(code) == 200:
print('%s\t登录成功,已连接外网.' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
elif int(code) == 99404:
print('%s\t尝试建立新连接失败.' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
else:
username = None
password = None
print('%s\t密码错误或连网失败,错误码:%d.' % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), int(code)))
# the net is connected, no need to re-connect
else:
print('%s\t已连接外网.' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
# set a check frequency (15 min)
time.sleep(60 * 0.25)
# enter of program
if __name__ == '__main__':
main()
四、效果
在正确输入账户和密码后,无论我怎么掉线、断网都能够保持drcom在线,挤都挤不掉。后面如果还有空的话,可以再次更新,争取添加用户界面,而不是这种控制台程序。
下面是软件直接运行的效果:
但是我有一次测试时发现直接双击运行软件似乎会被挂起,导致程序没有执行。因此,我想到了在其他终端软件中运行这个软件。下面是我目前正在使用的终端软件:Windows Terminal(在Microsoft Store搜索下载安装)。如下图:
经过长期的测试和运行,在该终端软件下执行KeepDrcomOL这个软件不会被挂起,而是根据软件所设定的频率定期检查网络并恢复网络。执行效果如下图(已连续运行20天+,无中断,无挂起情况):
使用方式:1. 打开Windows Terminal;2. 拖拽KeepDrcomOL.exe到Windows Terminal界面中;3. 回车键执行。
五、Linux端使用终端命令登录Drcom(教学区)
搜索了一下,我这里记录一下通过Linux终端命令登录深大Drcom的博客/资料,希望能够帮助到你。记录这个的主要原因是考虑到不是所有的Linux都有图形界面,都有浏览器。
第一种方式:在终端运行命令
wget -O/dev/null --post-data "DDDDD=你的Drcom账户&upass=你的Drcom密码&0MKKey=%B5%C7%A1%A1%C2%BC" https://drcom.szu.edu.cn/a70.htm
就可以在Linux上登录Drcom,连接外网了。其中“-O/dev/null”命令指的是不保存“a70.htm”这个页面文件。为什么要这么做呢?因为如果不这么做的话,在你调用wget的时候会在终端当前的路径自动下载“a70.htm”这个页面文件。实际上,这个文件是多余的,咱要的结果是登录Drcom就好了。
第二种方式(参考了Linux服务器下使用命令行登录校园网_深大为例):在终端运行命令
curl 'https://drcom.szu.edu.cn/a70.htm' -d "DDDDD=你的Drcom账号&upass=你的Drcom密码&0MKKey=%B5%C7%A1%A1%C2%BC"
第三种方式:在终端运行命令
python3
进入python解释器后,执行一下脚本
import requests
drcom_url = 'https://drcom.szu.edu.cn/a70.htm'
drcom_form = {'DDDDD': '你的Drcom账户', 'upass': '你的Drcom密码', '0MKKey': '%B5%C7%A1%A1%C2%BC'}
drcom_res = requests.post(drcom_url, drcom_form)
上面提供了几种登录Drcom的方式,如果不行就换着用吧。主要的思想是通过post请求实现深大Drcom登录,个人推荐使用第一种或者第二种方式。
六、Linux端使用终端命令登录Drcom(宿舍区)
登录脚本(亲测可行)
curl -G -d user_account=你的Drcom账户 -d user_password=你的Drcom密码 http://172.30.255.42:801/eportal/portal/login/
Python登录(亲测可行,python3环境下还需使用pip3安装requests包)
import requests
drcom_url = 'http://172.30.255.42:801/eportal/portal/login/'
drcom_form = {'user_account': '你的Drcom账户', 'user_password': '你的Drcom密码'}
drcom_res = requests.Session().get(url=drcom_url, params=drcom_form)