南京邮电大学—校园网(NJUPT-CMCC)自动连接脚本—基于Python

本文介绍基于Python的校园网自动连接脚本。该脚本可在电脑开机时,每天早上六点检测网络,若断开则自动联网。通过系统Ping百度判定网络状态,利用谷歌浏览器登录网站。还解决了浏览器驱动器版本不一致问题,最后将脚本加入计算机任务计划实现定时运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、功能描述

基于Python的校园网自动连接脚本,在电脑开机状态下,每天早上六点整自动运行脚本,检测网络是否连接,如是,检测结束;如检测到网络断开,自动联网。
自动联网机制是:程序在检测到无网络连接后,控制计算机通过谷歌浏览器打开登录网站,自动传入用户信息后点击登录按钮,完成登录。
本设计旨在解决本人远程连接使用服务器过程中被控端经常断网导致的远程连接失败的问题,尤其是在寒暑假期间。
注:本设计使用的打开登录网站的浏览器是谷歌浏览器,且必须保证无线网是自动连接状态。如图
在这里插入图片描述

二、检测是否有网

检测是否有网的方式有很多,本设计使用的方法是通过系统Ping百度网址,根据返回代码判定是否有网

# 网络连通 exit_code=0,否则返回非0值
exit_code = os.system('ping www.baidu.com')

三、自动联网

3.1 打开谷歌浏览器

先通过以下代码检测是否能正常打开谷歌浏览器,并且打开百度界面

import time
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)
driver.get('http://www.baidu.com')
time.sleep(2)

如果正常打开,则跳过3.2步骤,如果出现异常,那么一般是3.2中的问题

3.2 解决浏览器驱动器版本不一致问题

如果出现类似下述问题,可以参考该博客解决,也可以继续阅读本博客解决。
在这里插入图片描述
出现该问题本质原因在于浏览器驱动器的版本和浏览器版本不一致所导致的,也就是代码中使用的ChromeDriver支持的版本和已安装的Chrome浏览器版本不匹配,解决该问题的方法有两种:
1)卸载有关ChromeDriver的包,安装支持本机Chrome浏览器版本的Driver,这个方法不推荐,因为有更好的办法,即
2)下载和浏览器版本一致的驱动器,具体方法如下:
首先将Chrome浏览器更新到最新版本:点击谷歌浏览器右上角三个点→设置→关于Chrome,之后浏览器便会自动更新,更新结束后点击重新启动浏览器即可。
在这里插入图片描述

随后前往下载和浏览器版本匹配的驱动器,下载地址
在这里插入图片描述
找到对应的版本(之所以提前先更新浏览器到最新版本就是因为对应的驱动器好找,因为是最新发布的,往往就在最上面)
在这里插入图片描述
到这一步的时候选择下载Windows32即可
在这里插入图片描述
下载到本地解压后会得到一个chromedriver.exe的可执行文件。

!!!重点来了!!!

在得到chromedriver.exe,也就是驱动器以后,需要把它放置到正确位置,才能使用,而这个位置就是python.exe所在路径。 经常使用Python的朋友可能电脑里都装有不止一个Python环境,所以一定要把下载下来的驱动器放到你用来运行自动联网脚本的那个python.exe所在路径中。
比如,以我自己为例,我是使用的Anaconda安装的环境,那么就可以在我的Anaconda安装路径下的envs文件夹中找到我的Python安装环境
在这里插入图片描述
这里每个文件夹就代表一个环境,而每个环境中都会配有对应的python.exe,这里我选择使用的环境是WSY,所以就把chromedriver.exe放到WSY文件下,进入该文件夹,往下拖可以找到python.exe,就没有问题了。
在这里插入图片描述
完成上述步骤后再次运行打开浏览器的代码,打开成功。
在这里插入图片描述

3.3 登录网站

打开登录网站,只需要把上述代码中浏览器get的地址换成南邮NJUPT-CMCC的登录界面网址即可,也就是

http://1.0.0.0

下一步就是分别获取该界面上的账号、密码输入框以及登录按钮的路径表达式,这样才能向其发送账户信息以及向按钮发送指令,实现这一过程可分为5个步骤,如下图所示。
(2022-11-10更,后期突然发现之前放的图片显示违规了,不知道什么原因,懒得重新弄了,这部分内容可以参考该博客里的步骤2)

在这里插入图片描述

以获取“账号”输入框的路径表达式为例,首先在登录界面上按F12按键,打开网页源码,然后
①点击源码框左上角的箭头符号,这样就可以对选中的标签进行定位(注:该操作是单次性操作,只执行一次,也就是说在获取 每个标签路径之前都需要先点一下);
②鼠标点击“账号/Account”标签,就可以定位到其对应的路径表达式(即标记为蓝色的区域块),也就是我们需要向这个路径发送账号信息;
③④⑤复制该路径的Xpath属性,按图操作。
获取“密码”输入框和“登录”按钮的路径表达式方法也是同样的方法。
如复制到的具体内容如下:

账号://[@id=“edit_body”]/div[2]/div[4]/form/input[3]
密码://
[@id=“edit_body”]/div[2]/div[4]/form/input[4]
登录://*[@id=“edit_body”]/div[2]/div[4]/form/input[2]

在获取完对应的标签路径后,下面就是要通过代码把账户信息发送到对应地址,最后向“登录”按钮发送点击的指令,具体代码如下
我这里在执行每一步操作后都延时1秒,为的是能看清楚具体操作过程,不然程序运行后网页打开大概是一闪而过,就登录结束了。

        # 发送账户信息
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[3]').send_keys('这里输入账号')
        # time.sleep(1)
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[4]').send_keys('这里输入密码')
        # time.sleep(1)
        # 点击登录
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[2]').click()
        # time.sleep(1)

以上就是实现自动联网的大致过程,完整代码如下

import time
from selenium import webdriver
import time
import os

# http://p.njupt.edu.cn
url = ["http://www.baidu.com"]
for i in url:
    try:
        exit_code = os.system('ping www.baidu.com')
        # 网络连通exit_code=0,否则返回非0值
        if exit_code:
            raise Exception
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "网络 [NJUPT_CMCC] 已连接")
        time.sleep(2)
    except:
        print('网络断开,正在连接......')
        # 打开谷歌浏览器
        options = webdriver.ChromeOptions()
        options.add_experimental_option('excludeSwitches', ['enable-logging'])
        driver = webdriver.Chrome(options=options)
        # 打开登录界面
        driver.get('http://1.0.0.0')
        time.sleep(1)
        # 发送账户信息
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[3]').send_keys('账号')
        # time.sleep(1)
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[4]').send_keys('密码')
        # time.sleep(1)
        # 点击登录
        driver.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[4]/form/input[2]').click()
        time.sleep(1)
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "[NJUPT_CMCC] 连接成功!")
        time.sleep(2)

如果是南邮校友的话,在满足浏览器要求的前提下使用这段代码只需要填入自己的账户信息就可以实现网络连接,如果是其他单位的朋友想使用远程连接但苦恼于服务器端网络经常掉线的也可以通过以上方法实现自己的服务器断网重连。

四、定时运行脚本

这一部分的内容主要是为了实现让电脑定期自动执行脚本来判断网络是否断开,如果断掉就自动连接,这样就可以实现服务器的无人值守。为此,需要将执行该脚本的任务加入计算机的任务计划中去,通俗讲就是告诉电脑在什么时间通过什么东西来做什么事情。
步骤1:键盘 Win+X→计算机管理→选择任务计划程序;
步骤2:右侧选择 “创建基本任务”
在这里插入图片描述
步骤3:可以为任务本身创建名称和描述,方便识别,然后下一步
在这里插入图片描述

步骤4:触发器设置,这里用户可以自由设置,我选择每天,点击下一步后,可以设置每天具体执行时间。每隔1天发生一次就是每天发生一次的意思。
在这里插入图片描述
步骤5:下一步是设置“操作”,即希望该任务执行什么样的操作。现在可以回答上面提到的问题:我们的任务就是告诉电脑在每天6点整让一个python.exe程序执行一个python文件。那么6点已经设置过了,下面就是要告诉电脑要用的python.exe在哪里,需要执行的python文件又在哪里。为此,在“操作”界面中选择“启动程序”选项,点击下一步
在这里插入图片描述
这里需要仔细设置,python.exe的路径也就是上面说过的放置ChromeDriver.exe的路径,这个路径一般是固定的,要执行的python文件位置建议也放在一个固定的位置,避免以后在整理磁盘的时候不小心把文件位置换掉(如果文件位置变了在这里也要更改)。

例如:
python安装路径:C:\Anaconda\InstallationPath\envs\WSY
需要执行的python文件路径:C:\WSY\AutoConnect\LoginNJUPT_CMCC.py

在这里插入图片描述
步骤6:点击下一步,完成即可
随后,可以在任务计划程序库中查看到我们的任务,双击任务可以看到具体属性设置。
在这里插入图片描述
Over !
最后附上两张程序运行后的截图吧(是手动运行的python文件)
在这里插入图片描述
在这里插入图片描述
不得不说的是,南邮的网,真差!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值