瑞萌萌教你实现校园网自动登录(Python+Selenium)
好久不见!瑞萌萌不定期更新来啦~
时间真的过得好快,马上都要忙毕业开题啦,瑞萌萌在学术道路上也想追梦一把,大家一起努力吖!ヾ(◍°∇°◍)ノ゙
俺学校的校园网一直是属于那种需要验证登录,电脑熄屏再打开之后必须重新登录一遍,这真的挺烦的。可能有些小伙伴们觉得不嫌麻烦,那也可以当做看一看代码实现哈。一直知道有那种自动登录校园网的脚本,这两天疫情原因也使人焦虑,瑞萌萌无心学习就捣鼓了一天,查了些资料,开动了小脑袋实现了它!
反正我在我电脑上已经测试的很稳定了,把之前出现的好几个问题都处理掉了,瑞萌萌觉得自己的总结要比网上的很多教程清楚许多(不接受反驳,反正我也是个python小白),自我感觉还是很OK,嘿嘿。
代码放在推送的最后边。下面先简单讲一下一些重要的实现步骤以及代码推广的一些普适性修改。
所需工具:
(1)Python(瑞萌萌用的是anaconda配置的虚拟环境,在运行.py文件的时候会多几个步骤)
(2)selenium库
(3)浏览器驱动(Chrome、Edge或者其他)
1、安装selenium
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
常用的三种安装方法:①python编辑器IDLE②打开cmd进入到安装python的Scripts目录下③在anaconda prompt的激活环境里安装
输入:
pip install selenium
2、下载浏览器驱动
必须下载与chrome浏览器版本匹配的驱动chromedriver.exe,如果不匹配,启动会出现各种错误。可以通过浏览器右上角三个点->帮助->关于Google Chrome来查看版本。
下载好的chromedriver.exe有两种放入方法:①放到跟python.exe同一个路径的Scripts里(瑞萌萌是这种)②放在chrome安装目录下,如...\Application,并配置环境变量,步骤:右键点击我的电脑->属性->高级系统设置->环境变量->在用户变量的path路径下添加上浏览器文件所在的安装目录。
瑞萌萌这里就放常用的这俩浏览器,其他就自行解决吧(╥╯^╰╥)
Chrome浏览器驱动:
Edge浏览器驱动:
3、实现元素定位
不同学校的校园网页面设置不一样,但都可以通过定位元素来找到相应的标签。我们可以打开校园网页面,右击查看页面源代码。取表单的id或type或name属性,进行后续元素定位。
一定要找能定位到唯一元素的属性值,例如我这个页面“登录”和“注销”的type都是“button”,所以选择用id属性来进行元素定位。
4、连接Wi-Fi
实现校园网登录的前提是必须在WLAN中连接到校园网,通过os.system("netsh wlan connect name=*******")
5、隐藏浏览器页面
selenium启动chrome可以配置参数ChromeOptions来实现很多设置。瑞萌萌是看弹出来的浏览器页面有些碍眼并且自动操作还怪吓人的,就设置了隐藏浏览器页面,你也可以注释掉这几行代码。
6、实现开机启动
创建.bat文件(改个后缀名就行,相信你一定会),通过记事本打开,写入一行
python D:???\autologin.py
这里的路径是你这个.py文件所在的绝对路径。
然后把.bat文件放进C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu(菜单)\Programs(程序)\Startup(启动)文件夹(一般都是这个路径)下,完成后就可以开机启动啦~
瑞萌萌是用的anaconda中的python,所以需要先激活一下环境。下面是我的.bat文件。另外,可以在桌面也放一个.bat文件,开机后网断了的情况下,也可以直接双击一下。
瑞萌萌的autologin.py代码在这里!!(欢迎交流)
百度网盘
提取码:rmm9
#!/usr/bin/env python
# coding: utf-8
import os
from selenium import webdriver
import time
from selenium.webdriver.support.select import Select #如果校园网有下拉框的需要这个
#隐藏浏览器页面
option = webdriver.ChromeOptions()
option.add_argument('headless') # 设置option
driver = webdriver.Chrome(chrome_options=option) # 调用带参数的谷歌浏览器
#不隐藏浏览器页面
#driver = webdriver.Chrome() # 驱动浏览器
driver.set_page_load_timeout(5) #设置网页超时加载时间为5秒
#登录函数
def login():
while True:
try:
#输入你的校园网登录地址
driver.get("http://172.16.8.8/srun_portal_pc?ac_id=1&theme=basic2")
time.sleep(1)
break
except:
#如果网页出现异常比如timeout
driver.refresh() #刷新网页
pass
#选择移动、联通或者电信的下拉框,修改[@]里的内容
el=driver.find_element_by_xpath("//select[@name='domain']")
time.sleep(1)
Select(el).select_by_visible_text("移动校园宽带")
time.sleep(1)
#通过元素定位找到输入账号的标签,修改[@]里的内容
driver.find_element_by_xpath("//input[@type='text']").send_keys("********")
time.sleep(1)
#定位到密码标签,修改[@]里的内容
driver.find_element_by_xpath("//input[@type='password']").send_keys("******")
time.sleep(1)
#定位登录按钮,修改[@]里的内容
driver.find_element_by_xpath("//button[@id='login']").click()
time.sleep(2)
driver.quit()
if(os.system("ping ")==1): #测试现在有没有网络
#等于1表示没有网络
os.system("netsh wlan connect name=*******")#连接wifi
time.sleep(1)
login()
else:
driver.quit()#退出浏览器驱动
瑞萌萌不定期更新一直没有统一的内容,也是闲得无聊才会想到它,大家有什么好的想法或提议可以留言哟~爱你们ღ( ´・ᴗ・` )
希望疫情早日散去,愿大家都健康平安!心想事成!
END
快来瑞萌萌的小屋
喝杯茶吧~
JS Cookie怎样设置当天有效?在Cookie保存用户访问过的页面?
如题: 在客户端JS怎样设置当天有效的Cookie?在Cookie保存用户访问过的页面?
本人最近就是有这个需求,想统计一下用户每天访问过的页面有哪些(项目需要,不然可以通过网站统计工具完成)?一天重复访问的页面只算一次
不多说,直接上JS代码
function setCookie2(cookiename, cookievalue, milsecond)
{
var date = new Date();
date.setTime(date.getTime() + milsecond);
document.cookie = cookiename + "=" + cookievalue + "; path=/;expires = " + date.toGMTString();
}
function getCookie(name) {
var prefix = name + "="
var cookieStartIndex = document.cookie.indexOf(prefix)
if (cookieStartIndex == -1)
return "";
var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
if (cookieEndIndex == -1)
cookieEndIndex = document.cookie.length
return (document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT"
}
}
//现在距离当天结束时间:毫秒
function getExpireTime()
{
var date = new Date();
var hour = 23-date.getHours();
var min = 59-date.getMinutes();
var ms = (3600*hour + 60*min)*1000;
return ms;
}
function setVPage()
{
var host = window.location.host;
var page = document.location.href.replace(host,"").replace("http://",""); //去掉域名
var idx = page.indexOf("?");
if(idx>0)
{
page = page.substr(0,idx); //去掉参数
}
var ckpage = getCookie("VPAGE");
if(!ckpage || ckpage.indexOf(page) == -1)
{
ckpage += page+"|";
var ms = getExpireTime();
setCookie2("VPAGE", ckpage, ms);
//send request 把访问的页面发到服务器。。。
}
}
使用: 直接在JS调用 setVPage() 就可以了。
用FireBug看看cookie,可以看到存的页面名称,过期时间为当天晚上12点(只精确到分,秒不算。)