Selenium 浏览器自动化的优点:需求实现简单,所见即所得,不用对网页进行抓包、数据分析等复杂操作。缺点:模拟人工点击,时间成本高,处理效率低。
本文就 Selenium 进行简单的应用和介绍,以自动登录南工大校园网账号为例。如需南京工业大学校园网自动认证,请参考博文,欢迎交流:
南工大校园网自动认证登录
1.写在前面的话
1).本脚本运行环境为python,请同学们自行装好对应selenium库,对应浏览器驱动,建议使用 chrome,edge 等浏览器。
2).本教程使用Edge浏览器,现在微软强制更新,应该都有Edge了吧(/doge)
chrome浏览器下载驱动:http://chromedriver.storage.googleapis.com/index.html
edge浏览器请下载驱动:Microsoft Edge Driver - Microsoft Edge Developer
2.关于使用说明
1)配置浏览器驱动及信息
driver_url:上面下载的驱动找个地方放好,路径随意,我是放在Python的Scripts目录下。
##########################################################
driver_url = "C:\\ 填入浏览器驱动路径 \\msedgedriver.exe"
##########################################################
username = "填入自己的学号" # 填入自己的学号
passwd = "填入自己的密码" # 填入自己的密码
##########################################################
2)获取登录页面元素xpath
drivel 就是指向你所用的驱动的,此处以Edge为例,如果用Chrome,就把对应的webdriver.Edge 改成 webdriver.Chrome
url是上网认证的网址,此处以南工网址为例。
user_xpath,pwd_xpath 等需要自行获取网页元素的xpath,此处是已经填写好的南工认证的相关xpath
driver = webdriver.Edge(executable_path=driver_url)
url = "https://i.njtech.edu.cn/index.html" # 南工校园网网址
user_xpath = '//*[@id="username"]'
pwd_xpath = '//*[@id="password"]'
channel_xpath = '//*[@id="channelshow"]'
cmcc_xpath = '//*[@id="fm1"]/div/div[1]/div[1]/div[4]/div/span[2]'
button_xpath = '//*[@id="login"]'
3)登录函数的自动点击事件
详细的注释在代码块中,大致流程:1.输入学号密码 2.选择运营商 3.点击登录
def auto_login(url,username,passwd,user_xpath,pwd_xpath,channel_xpath,cmcc_xpath,button_xpath,):
driver.maximize_window() # 最大化窗口
driver.implicitly_wait(6) # 6秒内找到元素则立即执行
driver.get(url) # 获取网页
time.sleep(0.1)
# 通过xpath找到文本框并传入文本
driver.find_element_by_xpath(user_xpath).send_keys(username)
driver.find_element_by_xpath(pwd_xpath).send_keys(passwd)
time.sleep(0.1)
# 点击校园网按钮 -> 点击中国移动 -> 点击登录按钮
driver.find_element_by_xpath(channel_xpath).click()
driver.find_element_by_xpath(cmcc_xpath).click()
driver.find_element_by_xpath(button_xpath).click()
# 登录后关闭浏览器
driver.quit()
3.完整的源代码
### 本脚本使用selenium 4.0,请安装4.0及以上的库
from selenium import webdriver
from time import sleep
from subprocess import run, PIPE
##################################################
# #
# 脚本功能:自动点击浏览器实现登录南工, 实现网络认证 #
# #
##################################################
# #
# 本代码已经配置好南工网页认证的登录信息 #
# #
# 自己只需填入: 浏览器驱动路径,学号,密码 #
# #
##################################################
##########################################################
# 关于driver_url: #
# 下载浏览器驱动用以自动点击网页登陆 #
# 我这里用的是edge浏览器驱动,其他浏览器自己去下载对应的驱动 #
# 然后自己找个路径放好, 就是替换下面的driver_url的路径 #
# #
##########################################################
driver_url = "C:\\填入浏览器驱动路径\\msedgedriver.exe"
username = "填入自己的学号" # 填入自己的学号
passwd = "填入自己的密码" # 填入自己的密码
##########################################################
user_xpath = '//*[@id="username"]'
pwd_xpath = '//*[@id="password"]'
channel_xpath = '//*[@id="channelshow"]'
cmcc_xpath = '//*[@id="fm1"]/div/div[1]/div[1]/div[4]/div/span[2]'
### span[1], span[2], span[3]分别对应校园内网、中国移动、中国电信
### 更换运营商仅需修改span[2]中数字即可
button_xpath = '//*[@id="login"]'
url = "https://i.njtech.edu.cn/index.html" # 南工校园网网址
options = webdriver.EdgeOptions()
options.use_chromium = True
options.add_argument("headless")
options.add_argument("disable-gpu")
options.add_argument("log-level=3")
driver = webdriver.Edge(executable_path=driver_url, options=options)
def AutoLogin(
url,
username,
passwd,
user_xpath,
pwd_xpath,
channel_xpath,
cmcc_xpath,
button_xpath):
print("\n >>> 启动认证中")
driver.maximize_window() # 最大化窗口
driver.implicitly_wait(6) # 6秒内找到元素则立即执行
driver.get(url) # 获取网页
sleep(0.1)
print("\n >>> 填充密码中")
# 清空文本框已存在内容
driver.find_element_by_xpath(user_xpath).clear()
driver.find_element_by_xpath(pwd_xpath).clear()
# 通过xpath找到文本框并传入文本
driver.find_element_by_xpath(user_xpath).send_keys(username)
driver.find_element_by_xpath(pwd_xpath).send_keys(passwd)
sleep(0.1)
# 点击校园网按钮 -> 点击中国移动 -> 点击登录按钮
try:
driver.find_element_by_xpath(channel_xpath).click()
driver.find_element_by_xpath(cmcc_xpath).click()
except:
pass
driver.find_element_by_xpath(button_xpath).click()
print("\n >>> 登录成功 !!")
driver.quit() # 登录后关闭浏览器
def isConnect():
r = run('ping www.baidu.com -n 1', stdout=PIPE).returncode
if r == 0:
return True
else:
return False
AutoLogin(
url=url,
username=username,
passwd=passwd,
user_xpath=user_xpath,
pwd_xpath=pwd_xpath,
channel_xpath=channel_xpath,
cmcc_xpath=cmcc_xpath,
button_xpath=button_xpath )
while True:
if IsConnect() == False:
AutoLogin(
url=url,
username=username,
passwd=passwd,
user_xpath=user_xpath,
pwd_xpath=pwd_xpath,
channel_xpath=channel_xpath,
cmcc_xpath=cmcc_xpath,
button_xpath=button_xpath )
sleep(60 * 5) # 暂停程序, 每5分钟检测网络, 若断网则重启
4.写在最后的话
文章冗长,感谢您的耐心阅读!希望用您可爱的手手给俺点个赞,谢谢!
我是 Herk,一名正在努力不掉发😂的在校大学生,希望与您一起交流,共同学习。