> 技术文档 > 通过Python 3 和selenium库实现自动登录校园网(工大版)_利用selenium自动登录学校门户网站一站式办事大厅

通过Python 3 和selenium库实现自动登录校园网(工大版)_利用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 timefrom selenium import webdriverfrom selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Selectfrom 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 timefrom selenium import webdriverfrom selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Selectfrom 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\'# 判断是否存在该 XPathtry: # 尝试查找元素 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。

说明

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