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。
说明
如出现侵权,请联系删除。