您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python爬蟲怎樣解決無線網(wǎng)絡(luò)掉線問題,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
以山東大學(xué)網(wǎng)絡(luò)為例,別的話不多說,直接上程序
__author__ = 'CQC' #-*- coding:utf-8 -*- import urllib import urllib2 import socket import types import time import re import os import subprocess class Login: #初始化 def __init__(self): #學(xué)號密碼 self.username = '201200131012' self.password = 'XXXXXX' #山大無線STU的IP網(wǎng)段 self.ip_pre = '211.87' #登錄時長 self.overtime = 720 #檢測間隔時間,單位為秒 self.every = 10 #模擬登錄 def login(self): print self.getCurrentTime(), u"正在嘗試認(rèn)證QLSC_STU無線網(wǎng)絡(luò)" ip = self.getIP() data = { "username": self.username, "password": self.password, "serverType": "", "isSavePass": "on", "Submit1": "", "Language": "Chinese", "ClientIP": self.getIP(), "timeoutvalue": 45, "heartbeat": 240, "fastwebornot": False, "StartTime": self.getNowTime(), #持續(xù)時間,超過這個時間自動掉線,可進(jìn)行設(shè)置 "shkOvertime": self.overtime, "strOSName": "", "iAdptIndex": "", "strAdptName": "", "strAdptStdName": "", "strFileEncoding": "", "PhysAddr": "", "bDHCPEnabled": "", "strIPAddrArray": "", "strMaskArray": "", "strMask": "", "iDHCPDelayTime": "", "iDHCPTryTimes": "", "strOldPrivateIP": self.getIP(), "strOldPublicIP": self.getIP(), "strPrivateIP": self.getIP(), "PublicIP": self.getIP(), "iIPCONFIG":0, "sHttpPrefix": "http://192.168.8.10", "title": "CAMS Portal" } #消息頭 headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36', 'Host': '192.168.8.10', 'Origin': 'http://192.168.8.10', 'Referer': 'http://192.168.8.10/portal/index_default.jsp?Language=Chinese' } post_data = urllib.urlencode(data) login_url = "http://192.168.8.10/portal/login.jsp?Flag=0" request = urllib2.Request(login_url, post_data, headers) response = urllib2.urlopen(request) result = response.read().decode('gbk') self.getLoginResult(result) #打印登錄結(jié)果 def getLoginResult(self, result): if u"用戶上線成功" in result: print self.getCurrentTime(),u"用戶上線成功,在線時長為",self.overtime/60,"分鐘" elif u"您已經(jīng)建立了連接" in result: print self.getCurrentTime(),u"您已經(jīng)建立了連接,無需重復(fù)登陸" elif u"用戶不存在" in result: print self.getCurrentTime(),u"用戶不存在,請檢查學(xué)號是否正確" elif u"用戶密碼錯誤" in result: pattern = re.compile('<td>.*?2553:(.*?)</b>.*?</td>', re.S) res = re.search(pattern, result) if res: print self.getCurrentTime(),res.group(1),u"請重新修改密碼" else: print self.getCurrentTime(),u"未知錯誤,請檢查學(xué)號密碼是否正確" #獲取當(dāng)前時間戳,13位 def getNowTime(self): return str(int(time.time()))+"000" #獲取本機無線IP def getIP(self): local_iP = socket.gethostbyname(socket.gethostname()) if self.ip_pre in str(local_iP): return str(local_iP) ip_lists = socket.gethostbyname_ex(socket.gethostname()) for ip_list in ip_lists: if isinstance(ip_list, list): for i in ip_list: if self.ip_pre in str(i): return str(i) elif type(ip_list) is types.StringType: if self.ip_pre in ip_list: return ip_list #判斷當(dāng)前是否可以聯(lián)網(wǎng) def canConnect(self): fnull = open(os.devnull, 'w') result = subprocess.call('ping www.baidu.com', shell = True, stdout = fnull, stderr = fnull) fnull.close() if result: return False else: return True #獲取當(dāng)前時間 def getCurrentTime(self): return time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time())) #主函數(shù) def main(self): print self.getCurrentTime(), u"您好,歡迎使用模擬登陸系統(tǒng)" while True: nowIP = self.getIP() if not nowIP: print self.getCurrentTime(), u"請檢查是否正常連接QLSC_STU無線網(wǎng)絡(luò)" else: print self.getCurrentTime(),u"成功連接了QLSC_STU網(wǎng)絡(luò),本機IP為",nowIP self.login() while True: can_connect = self.canConnect() if not can_connect: nowIP = self.getIP() if not nowIP: print self.getCurrentTime(), u"當(dāng)前已經(jīng)掉線,請確保連接上了QLSC_STU網(wǎng)絡(luò)" else: print self.getCurrentTime(), u"當(dāng)前已經(jīng)掉線,正在嘗試重新連接" self.login() else: print self.getCurrentTime(), u"當(dāng)前網(wǎng)絡(luò)連接正常" time.sleep(self.every) time.sleep(self.every) login = Login() login.main()
來,我們來運行一下,看下效果吧! 執(zhí)行
python login.py
當(dāng)前是可以聯(lián)網(wǎng)的,我分別在網(wǎng)頁上操作執(zhí)行了斷開,操作,程序自動檢測到掉線,自動重新連接。 接下來我直接斷開了 QLSC_STU 網(wǎng)絡(luò)的鏈接,程序同樣檢測到 QLSC_STU 這個熱點沒有連接上,提示用戶鏈接。 接下來我重新連接上了這個熱點,由于剛才已經(jīng)登錄上線,且持續(xù)時間較短,網(wǎng)絡(luò)自動恢復(fù)正常。 下面是運行結(jié)果:
這樣我們就是實現(xiàn)了自動掉線的檢測和模擬登陸。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python爬蟲怎樣解決無線網(wǎng)絡(luò)掉線問題內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。