通过Python 3 和selenium库实现自动登录校园网(工大版)

Ps:文章最后有完整代码,需修改的地方在文章内已作出说明

背景

在使用有线连接校园网那个AP设备时,被要求每天都需要手动登录验证校园网,为了简化操作,利用python脚本和selenium库,实现自动化登录校园网。

应用场景

通过有线进行电脑和校园网AP设备连接,且想要实现自动登录校园网的。

前期准备

        python环境的搭建

自主搜索获取python环境的安装教程,此处不做赘述。

        selenium库的安装

win+R打开运行,输入cmd进入命令行

输入pip install selenium,回车

pip install selenium

出现“Successfully installed selenium-4.29.0”字样,即安装成功

本次使用的是selenium4.x系列库,版本更早的selenium与本实例代码不兼容,请正确安装。

        Edge浏览器驱动的安装

在寻找资料的过程中发现大部分教程使用的是Chrome浏览器,考虑到实际情况和个人使用喜好,此教程基于Edge浏览器实现。

msedgedriver在微软官网有提供下载,速度取决于实际情况。

快速跳转链接:

Microsoft Edge WebDriver | Microsoft Edge Developerhttps://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH根据自己电脑实际情况,安装Stable Channel中的对应版本即可。

下载完将压缩包中的exe文件,可以放入到“C:/Windows/”系统目录下,其他目录下也可以,然后复制文件路径(标记为:driver路径

代码搭建

在桌面新建一个txt文件,修改后缀名为.pyw,然后用IDLE打开该文件进行编辑,

增加注释刚才的driver路径

#driver路径:"C:/Windows/msedgedriver.exe"

Edge浏览器路径会找么?

方法如下:右键你的edge浏览器快捷方式,点击“打开文件所在的位置”,然后复制“msedge.exe”程序的路径(标记为:Edge路径

增加注释Edge路径

#edge路径:"C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
打开校园网登录认证界面

复制URL(此处不展示具体URL,就是如下界面的网址)

然后注释为

#URL:复制到的网址

接着注释如下内容

#登录按钮XPATH://*[@id="edit_body"]/div[2]/div[3]/form/input[1]
#账号XPath://*[@id="edit_body"]/div[2]/div[3]/form/input[2]
#密码XPath://*[@id="edit_body"]/div[2]/div[3]/form/input[3]
#注销XPath://*[@id="edit_body"]/div/div[2]/form/input
#运营商选择框XPath://*[@id="edit_body"]/div[2]/div[3]/select

注:此处为获取了登录按钮,账号输入框,密码输入框,注销按钮,运营商选择框的XPath路径,需了解具体原理的找百度。

铺垫到此,该进入代码正文了

正文

首先引用库,

import time
from selenium import webdriver
from selenium.webdriver.edge.service import Service 
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException

首先,打开网页的连招

"""启动引擎"""
selenium_path ='C:/Windows/msedgedriver.exe'
# 通过service方法打开路径
service = Service(selenium_path)
# 再去调用
driver = webdriver.Edge(service=service)
# 访问网址
driver.get("url")
#注:这里的url就直接复制粘贴成刚才注释中的网址

然后使用time.sleep等待一秒网页加载

time.sleep(1)

在这里定义注销按钮的xpath路径(路径均在注释中提前准备过了)

# 目标 XPath 路径
zhuxiao_xpath = '//*[@id="edit_body"]/div/div[2]/form/input'

接下去运用try结构判断校园网是否已经登录。

Part One

try:
    # 尝试查找元素
    element = driver.find_element(By.XPATH, zhuxiao_xpath)
    print("校园网已登录,即将退出程序!")
    driver.quit()

Part Two

except NoSuchElementException:
    # 如果捕获到没有元素的异常
    print("校园网未登录,开始执行登录程序!")
    #寻找账号输入框
    Account = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[2]')
    print('程序已完成: 1   /  8  .')
 
    ActionChains(driver)\
                          .send_keys_to_element(Account, "账号")\
                          .perform()
    print('程序已完成: 2   /  8  .')

    #寻找密码输入框
    Account = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[3]')
    print('程序已完成: 3   /  8  .')
 
    ActionChains(driver)\
                          .send_keys_to_element(Account, "密码")\
                          .perform()
    print('程序已完成: 4   /  8  .')

    # 定位下拉框元素
    dropdown_element = driver.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[3]/select')
    print('程序已完成: 5   /  8  .')
    
    # 使用 Select 处理下拉框
    select = Select(dropdown_element)
    print('程序已完成: 6   /  8  .')
    
    # 选择某个选项(示例:通过可见文本选择)
    select.select_by_visible_text("中国移动")
    #中国移动卡此处不做修改,中国电信卡请把此处的"中国移动"改为"中国电信"
    print('程序已完成: 7   /  8  .')

    #点击登录按钮
    click_LOAD = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[1]')
    ActionChains(driver) \
                         .click(click_LOAD) \
                         .perform()
    print('程序已完成: 100%   .')
    driver.quit()
    print('校园网登录成功,程序即将退出.')

————————————分割线————————————

以下内容做注意点提醒,无需二次复制。

注意:

 ActionChains(driver)\
                          .send_keys_to_element(Account, "账号")\
                          .perform()

此处账号为校园网登录账号(引号不能删)。

ActionChains(driver)\
                          .send_keys_to_element(Account, "密码")\
                          .perform()

此处密码为校园网登录密码(引号不能删)。

select.select_by_visible_text("中国移动")    

如果你的校园卡是中国移动,此处不做修改;

如果你的校园卡是中国电信,请把此处的"中国移动"改为"中国电信"。

——————分割线——————

完整代码如下:

'''
driver路径:"C:/Windows/msedgedriver.exe"
edge路径:"C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
URL:复制到的网址
登录按钮XPATH://*[@id="edit_body"]/div[2]/div[3]/form/input[1]
账号XPath://*[@id="edit_body"]/div[2]/div[3]/form/input[2]
密码XPath://*[@id="edit_body"]/div[2]/div[3]/form/input[3]
注销XPath://*[@id="edit_body"]/div/div[2]/form/input
运营商选择框XPath://*[@id="edit_body"]/div[2]/div[3]/select
'''

"""自动化测试"""
import time
from selenium import webdriver
from selenium.webdriver.edge.service import Service 
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException

"""启动引擎"""
selenium_path ='C:/Windows/msedgedriver.exe'
# 通过service方法打开路径
service = Service(selenium_path)
# 再去调用
driver = webdriver.Edge(service=service)
# 访问校园网认证网址(需修改)
driver.get("URL")

time.sleep(1)
# 目标 XPath 路径
zhuxiao_xpath = '//*[@id="edit_body"]/div/div[2]/form/input'

# 判断是否存在该 XPath
try:
    # 尝试查找元素
    element = driver.find_element(By.XPATH, zhuxiao_xpath)
    print("校园网已登录,即将退出程序!")
    driver.quit()
except NoSuchElementException:
    # 如果捕获到没有元素的异常
    print("校园网未登录,开始执行登录程序!")
    #寻找账号输入框
    Account = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[2]')
    print('程序已完成: 1   /  8  .')
    #(需修改)
    ActionChains(driver)\
                          .send_keys_to_element(Account, "账号")\
                          .perform()
    print('程序已完成: 2   /  8  .')

    #寻找密码输入框
    Account = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[3]')
    print('程序已完成: 3   /  8  .')
    #(需修改)
    ActionChains(driver)\
                          .send_keys_to_element(Account, "密码")\
                          .perform()
    print('程序已完成: 4   /  8  .')

    # 定位下拉框元素
    dropdown_element = driver.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[3]/select')
    print('程序已完成: 5   /  8  .')
    
    # 使用 Select 处理下拉框
    select = Select(dropdown_element)
    print('程序已完成: 6   /  8  .')
    
    # 选择某个运营商(按需修改)
    select.select_by_visible_text("中国移动")
    #中国移动卡此处不做修改,中国电信卡请把此处的"中国移动"改为"中国电信"
    print('程序已完成: 7   /  8  .')

    #点击登录按钮
    click_LOAD = driver.find_element(By.XPATH,'//*[@id="edit_body"]/div[2]/div[3]/form/input[1]')
    ActionChains(driver) \
                         .click(click_LOAD) \
                         .perform()
    print('程序已完成: 100%   .')
    driver.quit()
    print('校园网登录成功,程序即将退出.')

Finally,

要想实现开机自动连接校园网,需要把最后完整的.pyw文件放到开机自启目录中,

可通过win+R,输入shell:Common Startup,回车打开开机自启动目录,然后把pyw文件拖入此目录下,即可实现,也可通过其他方法实现(自行寻找合适的方法)。

可能遇到的问题:

使用一段时间后,出现无法正常加载,单独运行py文件时出现长文报错,则需要考虑更新msedgedriver。

说明

如出现侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值