溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python爬蟲怎樣解決無線網(wǎng)絡(luò)掉線問題

發(fā)布時間:2020-11-12 09:30:09 來源:億速云 閱讀:361 作者:小新 欄目:編程語言

這篇文章主要介紹了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é)果:

Python爬蟲怎樣解決無線網(wǎng)絡(luò)掉線問題

這樣我們就是實現(xiàn)了自動掉線的檢測和模擬登陸。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python爬蟲怎樣解決無線網(wǎng)絡(luò)掉線問題內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI