# -*- 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è)無線對(duì)象
self.iface = wifi.interfaces()[0] # 獲取當(dāng)前機(jī)器第一個(gè)無線網(wǎng)卡
# 查看wifi的連接狀態(tài)
def wifi_connect_status(self):
"""
判斷本機(jī)是否有無線網(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
亂碼問題:
把wifi_info.ssid重新編碼為gb18030
wifi_info.ssid.encode('raw_unicode_escape','strict').decode('gb18030')
我也不清楚他為什么不全用unicode
ssid出來應(yīng)該是unicode 但是 你往profile里面寫的時(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)斷開一下,因?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"))
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
