前言

        目前这是第一版本的drcom掉线解决方案,第二版本已完成更新并且无需配合chromedriver,请需要的同学移步至第二版。

一、准备步骤

        1. 确保电脑已经安装python3(若无,请参考此文章);

        2. 确保python3已经安装selenium库、requests库(若无请参考此文章安装python第三方库);

        3. 电脑有chrome浏览器或者其他浏览器,最好是chrome浏览器;

        4. 如果电脑装有chrome浏览器,则下载chromedriver。值得注意的是chromedriver下载后最好放到chrome浏览器的安装目录之下,而这个目录能看到chrome.exe文件的。例如,我的是这样的:

        我的脚本运行环境是win10、python3.6.3、selenium 3.141.0、requests 2.25.1、Chrome v75.0.3770.100(64 位)、chromedriver 75.0.3770.90。一般装最新的应该没啥问题。

二、编写脚本

        代码只有几十行,但是很多都是注释。如果你的python已经安装了selenium和requests库,那么可以不用在什么编程环境中编辑,可以在记事本或者能够编辑文本的地方直接修改部分的代码。如下:

from selenium import webdriver
import requests
import time

# 联网测试
# url:用于联网测试的url,一般访问百度的网站就好
def check_net(url):
    try:
        requests.get(url, timeout=3)    # 超时(3秒)设置
        return True                     # 访问成功
    except Exception as e:
        print(e)                        # 访问异常
        return False

# 登录Drcom
# account: 账号
# password:密码
def drcom_login(account, password):
    # 创建浏览器对象
    chrome = webdriver.Chrome(r'F:\AppRoot\Google\Chrome\Application\chromedriver.exe')

    # 打开Drcom联网链接
    chrome.get("https://drcom.szu.edu/a70.htm")

    # 输入账号
    input_account = chrome.find_element_by_id('VipDefaultAccount')
    input_account.send_keys(account)

    # 输入密码
    input_password = chrome.find_element_by_id('VipDefaultPassword')
    input_password.send_keys(password)

    # 点击登录按钮
    login_button = chrome.find_element_by_css_selector("input#login")
    login_button.submit()

    # 退出chrome
    chrome.close()

# 程序入口
if __name__ == '__main__':
    while True:
        # 如果没联网 则登录
        if not check_net("https://www.baidu/"):
            print("没网,即将登陆Drcom...")
            drcom_login("000000", "123456789")   # 填你的Drcom账号(一卡通号)、密码
        # 如果已经有网则不再登陆
        else:
            print("有网,不再登陆Drcom...")
        time.sleep(1800)    # 半小时巡查一遍 多久时间执行取决于你自己 为了不占用电脑内存,还是设置大一点好

三、执行脚本

        由于我的电脑已经安装了python3及代码中我需要使用到的库,所以我写完脚本以后可以直接在命令行中执行我的代码。在命令行中找到我的脚本文件(autologin4drcom.py):

        执行脚本:python autologin4drcom.py。因为我的电脑已经连上drcom了,所以它会提示这有网...。

        但是如果我断掉drcom的网,即在网页中注销我的账号,这个脚本就会检测到网络异常,如下图。这个时候,脚本就会执行drcom的自动登录,但前提是你的账号密码是对的。

        连上以后,就又会提示有网了。

四、关于脚本

        关于脚本,这里做一些简单的讨论和声明:

        1. selenium所用到的浏览器不一定是chrome,也可以是火狐浏览器、或者其他名气比较大的浏览器,那么它相对应的driver就要自己去找,对得上就行。

        2. 脚本中进行联网判断不一定要用requests,按道理其他第三方库例如urllib之类的应该没问题,此外我也有见到用系统库socket判断的,但是当时我用的时候一直提示没有网...就换成了requests这个判断方法。

        3. 脚本中对账号密码之类啥的没有进行什么判断,如果密码不对也没有抛出异常,这说明脚本不是很完美。但一般自己的账号密码自己都清楚吧,所以我就不做判断了。

        4. 使用场景:比如自己想用向日葵、Teamviewer等远程连接自己在实验室的电脑,但是实验室的电脑又需要联网才能被远程连接,这时脚本就发挥出它的作用所在了。通过执行脚本,可以让电脑保持有网在线,这样你可以随时随地进行联网远程控制,十分方便。当然,也希望学校的Drcom客户端能够完善一下,能够保持账号不会掉线。

        5. 脚本涉及到网络请求、python爬虫和网页元素选择等知识,若有需求可通过搜索这些关键词自学相关知识。

五、结束语

        对于不是经常使用到python的同学来说可能写这个脚本确实麻烦了点,但对于熟悉python的同学我相信你可以很快把这个程序跑起来并根据自己的需求造福自己。后期如果有时间有精力我将简化执行这个脚本的步骤。如果有更好的建议也请留言,期待你的讨论。

更多推荐

深大校园网掉线/Drcom掉线/校园网保持在线的python脚本