拒绝掉线!利用selenium实现校园网自动重连

由于不能去实验室,却又需要控制实验室的一台电脑,而装了teamview,可是不知道为什么实验室的电脑总是断网,所以不得不每天麻烦小伙伴帮忙连下网络。


实在是受够了这神奇的网络,自己动手丰衣足食!于是我只能抄起年轻时用的webdriver和爬虫,写了个自动重连的脚本。原理很简单,控制浏览器模拟鼠标和键盘动作。

(PS: 在爬虫领域webdriver一般是在网站的反爬虫机制过于严格的情况下才动用的大杀器,由于完全模拟人操作浏览器的动作,所以在技术上不存在被检测判定为爬虫的可能。)

以下大概介绍原理:

一、判断是否断网

原本我是根据get百度网址,获取状态码,发现是200就认为是没断网。结果发现这样并不可行,因为如果认证超时了,也会返回认证登陆界面并且返回200,而此时应该是断网状态。
于是我改成了这种判定方法——查找返回的界面是否有“百度一下”的按钮。

baidu_request = requests.get("http://www.baidu.com")
if (baidu_request.status_code == 200):
    baidu_request.encoding = 'utf-8'
    baidu_request_bsObj = BeautifulSoup(baidu_request.text, 'html.parser')
    baidu_input = baidu_request_bsObj.find(value="百度一下")
    if baidu_input == None:
        return False
    return True

二、断网重连

打开一个浏览器,输入网络连接的url后等待一会,应该会出现登陆界面;
接下来,查找用户名和密码,输入、点击登录按钮。
非常简单。

driver = webdriver.Chrome()
try:
    driver = webdriver.Chrome()
    driver.get("https://w.seu.edu.cn/")
    time.sleep(3)
    username_input = driver.find_element_by_id("username")
    password_input = driver.find_element_by_id("password")
    login_button = driver.find_element_by_id("login")

    username_input.send_keys(username_str)
    password_input.send_keys(password_str)
    login_button.click()
except:
    print(self.getCurrentTime(), u"登陆函数异常")
finally:
    driver.close()

其他:

一、为什么不用表单登陆而要动用大杀器webdriver?

我研究了下,登录方法确实是post表单登陆,但是试了很多次header设置都不对,嫌麻烦就放弃了。
post表当登陆确实应该是鲁棒性更强的方式。

二、为什么东南大学的ZZ校园网夜里必然断网?

根据现在的经验,应该是会判定每一个登陆的设备的活跃时间,如果持续数小时不活跃就会被管理端强制断线。
我原来在电脑上跑一个程序,会持续向外网发送数据,那次就好几天都没断网。

python代码

效果演示

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值