解决的问题:
由于校园网隔段时间就会自己掉线,导致无法远程连接服务器,这给远程使用的我带来了巨大的麻烦,为了解决这个问题,从网上收集了各种资料,最后选择使用selenium这个python库模拟登录校园网的操作。
实现方式如下(推荐在linux下操作):
1)pip安装selenium包:
pip install selenium
2)下载webdriver firefox内核(python可以操控的浏览器,跟我们平时用的浏览器不同,代码中使用Firefox的driver,如果想用其他浏览器,可以自行查找一下相关文章,之前有看到使用chrome浏览器的,将代码中Firefox()替换为了Chrome(),不过这种方式本人还没有尝试过),下载地址:
https://github.com/mozilla/geckodriver/releases
3)解压缩下载的文件到一个文件夹,如果是linux则复制到/usr/bin/geckodriver ,如果是windows则手动添加环境变量,这样python运行时可以找到这个driver。linux 复制该driver的代码:
sudo cp geckodriver /usr/bin/geckodriver
4)修改代码。代码的下载地址:
https://github.com/KuangenZhang/net_connect
修改代码中的校园网用户名,校园网密码,校园网登陆地址,校园网用户名输入控件ID,校园网密码输入控件ID,以及校园网连接控件ID。以上几个ID都可以通过查看网页源码得到。
username_str = "****" # 你的校园网登陆用户名
password_str = "****" # 你的校园网登陆密码
can_connect = True
def login():
try:
driver = webdriver.Firefox()
driver.get("http://net.********.edu.cn") # 你的校园网登陆地址
time.sleep(3)
username_input = driver.find_element_by_id("uname") # 校园网登陆用户名的输入控件ID, 浏览器上右键查看网页源代码查询
password_input = driver.find_element_by_id("pass") # 校园网登陆密码的输入控件ID, 浏览器上右键查看网页源代码查询
print('Searching connect')
login_button = driver.find_element_by_id("connect") # 校园网登陆连接的点击控件ID, 浏览器上右键查看网页源代码查询
print('Find connect successfully')
username_input.send_keys(username_str)
password_input.send_keys(password_str)
print('Input user info')
login_button.click()
print('Connect')
except:
print(getCurrentTime(), u"登陆函数异常")
finally:
driver.close()
如果发现网页中。所要获取的标签没有id,上述方式将不再适用,而可以使用如下的方式,代码如下:
username_str = "***" # 你的校园网登陆用户名
password_str = "***" # 你的校园网登陆密码
can_connect = True
def login():
try:
driver = webdriver.Firefox()
driver.get("***") # 你的校园网登陆地址
time.sleep(3)
username_input = driver.find_element_by_name("username")
#username_input = driver.find_element_by_id("username") # 校园网登陆用户名的输入控件ID, 浏览器上右键查看网页源代码查询
password_input = driver.find_element_by_name("password")
#password_input = driver.find_element_by_id("password") # 校园网登陆密码的输入控件ID, 浏览器上右键查看网页源代码查询
print('Searching connect')
login_button = driver.find_element_by_id("button") # 校园网登陆连接的点击控件ID, 浏览器上右键查看网页源代码查询
print('Find connect successfully')
username_input.send_keys(username_str)
password_input.send_keys(password_str)
print('Input user info')
login_button.click()
print('Connect')
except:
print(getCurrentTime(), u"登陆函数异常")
finally:
driver.close()
使用driver.find_element_by_name()方式获取,或者是driver.find_element_by_class_name(),这些一个html文件中,一个标签必备的元素之一 ,用于指代该标签。更多通过selenium库获取网页标签信息的方式可参见下面的博客:
https://blog.csdn.net/qq_32897143/article/details/80383502
5)运行代码
python main_webdriver.py
接下来可以试试手动登出校园网,看看程序是否自动连接成功。