这篇文章主要介绍了Python爬虫怎样解决无线网络掉线问题,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
以山东大学网络为例,别的话不多说,直接上程序
__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):
#学号密码
self.username = '201200131012'
self.password = 'XXXXXX'
#山大无线STU的IP网段
self.ip_pre = '211.87'
#登录时长
self.overtime = 720
#检测间隔时间,单位为秒
self.every = 10
#模拟登录
def login(self):
print self.getCurrentTime(), u"正在尝试认证QLSC_STU无线网络"
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(),
#持续时间,超过这个时间自动掉线,可进行设置
"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)
#打印登录结果
def getLoginResult(self, result):
if u"用户上线成功" in result:
print self.getCurrentTime(),u"用户上线成功,在线时长为",self.overtime/60,"分钟"
elif u"您已经建立了连接" in result:
print self.getCurrentTime(),u"您已经建立了连接,无需重复登陆"
elif u"用户不存在" in result:
print self.getCurrentTime(),u"用户不存在,请检查学号是否正确"
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"未知错误,请检查学号密码是否正确"
#获取当前时间戳,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
#判断当前是否可以联网
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
#获取当前时间
def getCurrentTime(self):
return time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time()))
#主函数
def main(self):
print self.getCurrentTime(), u"您好,欢迎使用模拟登陆系统"
while True:
nowIP = self.getIP()
if not nowIP:
print self.getCurrentTime(), u"请检查是否正常连接QLSC_STU无线网络"
else:
print self.getCurrentTime(),u"成功连接了QLSC_STU网络,本机IP为",nowIP
self.login()
while True:
can_connect = self.canConnect()
if not can_connect:
nowIP = self.getIP()
if not nowIP:
print self.getCurrentTime(), u"当前已经掉线,请确保连接上了QLSC_STU网络"
else:
print self.getCurrentTime(), u"当前已经掉线,正在尝试重新连接"
self.login()
else:
print self.getCurrentTime(), u"当前网络连接正常"
time.sleep(self.every)
time.sleep(self.every)
login = Login()
login.main()
来,我们来运行一下,看下效果吧! 执行
python login.py
当前是可以联网的,我分别在网页上操作执行了断开,操作,程序自动检测到掉线,自动重新连接。 接下来我直接断开了 QLSC_STU 网络的链接,程序同样检测到 QLSC_STU 这个热点没有连接上,提示用户链接。 接下来我重新连接上了这个热点,由于刚才已经登录上线,且持续时间较短,网络自动恢复正常。 下面是运行结果:
这样我们就是实现了自动掉线的检测和模拟登陆。
感谢你能够认真阅读完这篇文章,希望小编分享Python爬虫怎样解决无线网络掉线问题内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。