在图书馆网还好,回到宿舍,校园网动不动就断,就想能不能写个工具,隔一段时间检查网络是否连接,没有的话就自动连接
看了别人的博客,发现并不难实现,主要就是需要获取消息头headers和请求信息post data(用google浏览器按F12就可以找到)
https://blog.csdn.net/hty46565/article/details/72822447
所以自己上手了
from pywifi import PyWiFi,const,Profile
import time
import pywifi
import urllib
import urllib.request
import requests
import os
from bs4 import BeautifulSoup
import http.cookiejar
username = 'xxx'
password = 'xxx'
url = 'xxxx'
def SignOn():
try:
headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Origin': 'http://xxxx',
'Cache-Control': 'max-age=0',
'Content-Length': '162',
'Host': 'xxx',
'Referer':'xxxxx',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134',
'Content-Type': 'application/x-www-form-urlencoded',
'Upgrade-Insecure-Requests': '1',
'Cookie': 'xxxx',
'Connection': 'keep-alive',
}
data = {
'usernameHidden': username,
'username':username,
'pwd':password,
}
z = requests.post(url,data=data,headers=headers)
s = z.text.encode('utf-8').decode('utf-8')
soup = BeautifulSoup(s, 'html.parser')
msg = soup.find_all('title')[0]
if msg.get_text()=='登录成功':
print("连接校园网成功!")
else:
print("连接校园网失败!")
except:
print("连接出现故障!")
结果一直运行失败…
所以就用fiddler抓包来看
fiddler设置好后,浏览器搜索网页的时候就数据包会被拦截
python可以通过以下方法实现fiddler对其拦截
proxies = {
"http": "http://127.0.0.1:8888",
"https": "http://127.0.0.1:8888",}
z = requests.post(url,data=data,headers=headers,proxies=proxies)
结果发现
1.COOKIE有一个JSESSIONID每次都会变,其实就是一个会话,所以先请求一次获取JSESSIONID
s = requests.Session()
r = s.get(url)
jid = r.cookies.values()[0]
2.两个POST 里的访问地址不一样
这才是导致失败最大的问题
误以为是连接校园网时弹出的窗口的网址
把url改完后就成功啦!!!
附上搜索附近WIFI和连接WIFI(适用于无密码或像校园网一样在弹出页面登录)的代码
def scanWifi():
wifi=pywifi.PyWiFi()
iface=wifi.interfaces()[0]
iface.scan()
time.sleep(1)
bsses=iface.scan_results()
for bss in bsses:
print("{},信号:{}".format(bss.ssid,bss.signal))
def connectWifi(wifiName):
wifi = pywifi.PyWiFi() # 创建一个wifi对象
ifaces = wifi.interfaces()[0] # 取第一个无限网卡
ifaces.disconnect() # 断开网卡连接
time.sleep(1)
profile = pywifi.Profile() # 配置文件
profile.ssid = wifiName # wifi名称
ifaces.remove_all_network_profiles() # 删除其他配置文件
tmp_profile = ifaces.add_network_profile(profile) # 加载配置文件
ifaces.connect(tmp_profile) # 连接
也可以做个简单的界面
import _tkinter
import tkinter
myGUI=tkinter.Tk(className='校园网自动登录')
sw = myGUI.winfo_screenwidth()#得到电脑屏幕宽度
sh = myGUI.winfo_screenheight()#得到电脑屏幕高度
ww = 300#窗口宽度
wh = 180#窗口高度
x = (sw-ww) / 2
y = (sh-wh) / 2
myGUI.geometry("%dx%d+%d+%d" %(ww,wh,x,y))#居中显示
label_Name=tkinter.Label(myGUI,text="账号").grid(row=3,column=3,padx=15,pady=10)
label_Pwd=tkinter.Label(myGUI,text="密码").grid(row=4,column=3,padx=15,pady=10)
Name=tkinter.Entry(width=30)
Name.insert(0,"xxxx")#默认账号
Name.grid(row=3,column=4)
Pwd=tkinter.Entry(width=30,show = '*')
Pwd.insert(0,'123456')#默认密码
Pwd.grid(row=4,column=4)
logIN=tkinter.Button(myGUI,text='Connect',width=30).grid(row=5,column=4)
tkinter.mainloop()