# 需要安裝的模塊
# pip install pywifi
# pip install comtypes
# -*- coding: utf-8 -*-
import time
from pywifi import const, PyWiFi, Profile
class WiFi(object):
# 創(chuàng)建對(duì)象自動(dòng)初始化,類似Java的構(gòu)造函數(shù)
def __init__(self):
wifi = PyWiFi() # 創(chuàng)建一個(gè)無(wú)線對(duì)象
self.iface = wifi.interfaces()[0] # 獲取當(dāng)前機(jī)器第一個(gè)無(wú)線網(wǎng)卡
# 查看wifi的連接狀態(tài)
def wifi_connect_status(self):
"""
判斷本機(jī)是否有無(wú)線網(wǎng)卡,以及連接狀態(tài)
:return:已連接或存在網(wǎng)卡返回1,否則返回0
"""
ret_list = []
# 判斷是否連接成功
if self.iface.status() in \
[const.IFACE_CONNECTED, const.IFACE_CONNECTING, const.IFACE_INACTIVE]:
return self.iface.name() # 連接成功顯示連接設(shè)備
else:
return "not connected!" # 連接失敗返回失敗信息
"""
掃描附近wifi
亂碼問(wèn)題:
把wifi_info.ssid重新編碼為gb18030
wifi_info.ssid.encode('raw_unicode_escape','strict').decode('gb18030')
我也不清楚他為什么不全用unicode
ssid出來(lái)應(yīng)該是unicode 但是 你往profile里面寫(xiě)的時(shí)候 必須是gb18030
所以這么一個(gè)操作
你會(huì)發(fā)現(xiàn)gb18030在控制臺(tái)和py的某些控件上輸出是亂碼 是因?yàn)?控制臺(tái)是utf-8
想在這上面輸出中文的話你得encode('raw_unicode_escape','strict').decode()
"""
def scan_wifi(self, scantime=5):
"""
:param scantime: 指定掃描時(shí)間,默認(rèn)掃描時(shí)間為5秒
:return: 返回的是一個(gè)network dictionary,key=bssid,value=ssid
"""
self.iface.scan() # 掃描附近wifi
time.sleep(scantime)
basewifi = self.iface.scan_results()
dict = {}
for i in basewifi:
dict[i.bssid] = i.ssid.encode(encoding='raw_unicode_escape', errors='strict').decode()
return dict
# 鏈接到指定wifi
def connect_wifi(self, wifi_ssid, password):
profile = Profile() # 配置文件
profile.ssid = wifi_ssid # wifi名稱
profile.auth = const.AUTH_ALG_OPEN # 需要密碼
profile.akm.append(const.AKM_TYPE_WPA2PSK) # 加密類型
profile.cipher = const.CIPHER_TYPE_CCMP # 加密單元
profile.key = password # wifi密碼
self.iface.remove_all_network_profiles() # 刪除其他配置
tmp_profile = self.iface.add_network_profile(profile) # 加載配置
self.iface.connect(tmp_profile) # link start
time.sleep(10) # 嘗試10s是否成功
isok = True
if self.iface.status() == const.IFACE_CONNECTED:
return isok # 連接成功
else:
isok = False # 連接失敗設(shè)置isok = False
self.iface.disconnect() # 避免超時(shí)后連接成功手動(dòng)斷開(kāi)一下,因?yàn)樵谝欢〞r(shí)間內(nèi)連接失敗用戶會(huì)繼續(xù)重試連接
time.sleep(1)
return isok
if __name__ == "__main__":
wifi = WiFi()
print(wifi.wifi_connect_status())
print(wifi.scan_wifi())
print(wifi.connect_wifi(r"HUAWEI P30 Pro", r"123456789"))
# 來(lái)源:https://blog.csdn.net/xc_zhou/article/details/103334659
# :https://blog.csdn.net/Mmagic1/article/details/120066894