コード例 #1
0
ファイル: vpn.py プロジェクト: jiang1231/BTBU-Spider
    def login(self):
        # 登录vpn
        super(JWC, self).login()

        idcode_url = "https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+verifycode.servlet"
        login_url = 'https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+Logon.do'
        idcode = get_idcode(idcode_url, cookies=self.s.cookies)

        login_data = {"method": "logon",
                      "USERNAME": self.id,
                      "PASSWORD": self.pwd,
                      "RANDOMCODE": idcode}
        r = self.s.post(login_url, data=login_data)

        if re.search("http://jwgl.btbu.edu.cn/framework/main.jsp", r.text) or re.search(
                "http://10.0.40.192/jsxsjz/framework/main.jsp", r.text):
            # 登陆成功之后必须先访问这个网站,拿到权限
            r = self.s.post(login_url, data={'method': 'logonBySSO'})
            if r.status_code == 200:
                return self.s.cookies
        else:
            result = re.findall('''<span id="errorinfo">(.*)</span>''', r.text)
            if result:
                error_msg = result[0]
                logger.warning(error_msg)
                raise Exception("error: %s" % error_msg)
            else:
                logger.error("error: 未知的异常")
                logger.error(r.text)
                raise Exception("error: 未知的异常")
コード例 #2
0
ファイル: vpn.py プロジェクト: Petelin/BTBU-Spider
    def login(self):
        # 登录vpn
        super(JWC, self).login()

        idcode_url = "https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+verifycode.servlet"
        login_url = 'https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+Logon.do'
        idcode = get_idcode(idcode_url, cookies=self.s.cookies)

        login_data = {"method": "logon",
                      "USERNAME": self.id,
                      "PASSWORD": self.pwd,
                      "RANDOMCODE": idcode}
        r = self.s.post(login_url, data=login_data)

        if re.search("http://jwgl.btbu.edu.cn/framework/main.jsp", r.text) or re.search(
                "http://10.0.40.192/jsxsjz/framework/main.jsp", r.text):
            # 登陆成功之后必须先访问这个网站,拿到权限
            r = self.s.post(login_url, data={'method': 'logonBySSO'})
            if r.status_code == 200:
                return self.s.cookies
            else:
                raise BaseException(JWC_EXCEPTION.PASSWORD_ERROR)
        else:
            result = re.findall('''<span id="errorinfo">(.*)</span>''', r.text)
            if result:
                error_msg = result[0]
                raise BaseException(JWC_EXCEPTION.ERROR, error_msg)
            else:
                logger.error(r.text)
                raise BaseException(JWC_EXCEPTION.UNKNOW_ERROR)
コード例 #3
0
ファイル: vpn.py プロジェクト: Petelin/BTBU-Spider
    def traffic(self, id, name, radio=2):
        # 先要授权
        url = 'https://vpn.btbu.edu.cn/dana/home/invalidsslsite_confirm.cgi'
        result = self.s.post(url)
        match = re.search(r"""<input id="xsauth_400" type="hidden" name="xsauth" value="(.*?)">""", result.text)
        xsauth = match.groups()[0]
        data = 'xsauth={}&url=%2F%2CDanaInfo%3Dself.btbu.edu.cn%2CSSL%252B&certHost=self.btbu.edu.cn&certPort=443&certDigest=048ef3a83ef7af63e9651ba47b2ff39e&errorCount=1&notAfter=1450339235&action=%E7%BB%A7%E7%BB%AD'.format(
            xsauth)
        self.s.post(url, data)

        url = 'https://vpn.btbu.edu.cn/,DanaInfo=self.btbu.edu.cn,SSL+chaxjg.php'
        data = {'UserAccount': id,
                'UserName': requests.utils.quote(name.encode('gbk')),
                'radio': radio,
                'button': requests.utils.quote(u'查询'.encode('gbk')),}

        data_str = ""
        for k, v in data.items():
            data_str += "{}={}&".format(k, v)
        headers = {'Content-Type': 'application/x-www-form-urlencoded',}
        result = self.s.post(url, headers=headers, data=data_str)
        html = result.text.encode('latin1').decode('gbk')

        # 解析
        soup = BeautifulSoup(html, 'html.parser')
        print(html)
        logger.debug(html)
        logger.error(html)
        u2t = [soup.find_all('strong')[-1].parent.parent.parent.parent.text.strip().split('\n')[i] for i in [-2, 3]]
        return u2t
コード例 #4
0
    def traffic(self, id, name, radio=2):
        # 先要授权
        url = 'https://vpn.btbu.edu.cn/dana/home/invalidsslsite_confirm.cgi'
        result = self.s.post(url)
        match = re.search(r"""<input id="xsauth_400" type="hidden" name="xsauth" value="(.*?)">""", result.text)
        xsauth = match.groups()[0]
        data = 'xsauth={}&url=%2F%2CDanaInfo%3Dself.btbu.edu.cn%2CSSL%252B&certHost=self.btbu.edu.cn&certPort=443&certDigest=048ef3a83ef7af63e9651ba47b2ff39e&errorCount=1&notAfter=1450339235&action=%E7%BB%A7%E7%BB%AD'.format(
            xsauth)
        self.s.post(url, data)

        url = 'https://vpn.btbu.edu.cn/,DanaInfo=self.btbu.edu.cn,SSL+chaxjg.php'
        data = {'UserAccount': id,
                'UserName': requests.utils.quote(name.encode('gbk')),
                'radio': radio,
                'button': requests.utils.quote(u'查询'.encode('gbk')),}

        data_str = ""
        for k, v in data.items():
            data_str += "{}={}&".format(k, v)
        headers = {'Content-Type': 'application/x-www-form-urlencoded',}
        result = self.s.post(url, headers=headers, data=data_str)
        html = result.text.encode('latin1').decode('gbk')

        # 解析
        soup = BeautifulSoup(html, 'html.parser')
        print(html)
        logger.debug(html)
        logger.error(html)
        u2t = [soup.find_all('strong')[-1].parent.parent.parent.parent.text.strip().split('\n')[i] for i in [-2, 3]]
        return u2t
コード例 #5
0
ファイル: vpn.py プロジェクト: jiang1231/BTBU-Spider
 def get():
     all = (("", 1), ("http://202.106.16.36:3128", 0),)
     ip = random.choice([k for k, v in all for i in range(v)])
     p = dict(https=ip, http=ip)
     try:
         requests.get("http://www.baidu.com", timeout=1, proxies=p)
     except requests.exceptions.Timeout as e:
         logger.error("proxies not use able: %s" % ip)
         return {'https': ''}
     return p
コード例 #6
0
ファイル: vpn.py プロジェクト: Petelin/BTBU-Spider
 def get_timetable(self, time):
     # get significant
     # timetable_url = "https://vpn.btbu.edu.cn/jsxsjz/,DanaInfo=10.0.40.192,Port=80+tkglAction.do"
     timetable_url = "https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+tkglAction.do"
     params = "?method=kbxxXs"
     r = self.s.get(timetable_url + params)
     g = re.findall("""<input.*"xs0101id".*value ?= ?"(.*)".*/>""", r.text)
     if len(g) < 1:
         logger.error('get_timetable,拿不到操作码')
         return "登录已失效"
     signid = g[0]
     logger.info(signid)
     params = "?method=goListKbByXs&istsxx=no&xnxqh=" + time + "&zc=&xs0101id=" + signid
     r = self.s.get(timetable_url + params)
     return self.__parse_timetable(r.content)
コード例 #7
0
ファイル: vpn.py プロジェクト: Petelin/BTBU-Spider
 def get():
     (ip, port), name = get_proxy()
     if ip is None or port is None:
         return dict(https='', http='')
     ip, port = ip.decode(), port.decode()
     url = 'http://{0}:{1}'.format(ip, port)
     p = dict(https=url, http=url)
     try:
         requests.get("https://www.baidu.com", timeout=1, proxies=p)
         good_proxy(name)
     except:
         logger.error("proxies not use able: %s" % ip)
         rm_proxy(name)
         return dict(https='', http='')
     return p
コード例 #8
0
ファイル: vpn.py プロジェクト: wangzli/BTBU-Spider
 def get_timetable(self, time):
     # get significant
     # timetable_url = "https://vpn.btbu.edu.cn/jsxsjz/,DanaInfo=10.0.40.192,Port=80+tkglAction.do"
     timetable_url = "https://vpn.btbu.edu.cn/,DanaInfo=jwgl.btbu.edu.cn+tkglAction.do"
     params = "?method=kbxxXs"
     r = self.s.get(timetable_url + params)
     g = re.findall("""<input.*"xs0101id".*value ?= ?"(.*)".*/>""", r.text)
     if len(g) < 1:
         logger.error('get_timetable,拿不到操作码')
         return "登录已失效"
     signid = g[0]
     logger.info(signid)
     params = "?method=goListKbByXs&istsxx=no&xnxqh=" + time + "&zc=&xs0101id=" + signid
     r = self.s.get(timetable_url + params)
     return self.__parse_timetable(r.content)
コード例 #9
0
ファイル: vpn.py プロジェクト: wangzli/BTBU-Spider
 def get():
     (ip, port), name = get_proxy()
     if ip is None or port is None:
         return dict(https='', http='')
     ip, port = ip.decode(), port.decode()
     url = 'http://{0}:{1}'.format(ip, port)
     p = dict(https=url, http=url)
     try:
         requests.get("https://www.baidu.com", timeout=1, proxies=p)
         good_proxy(name)
     except:
         logger.error("proxies not use able: %s" % ip)
         rm_proxy(name)
         return dict(https='', http='')
     return p
コード例 #10
0
ファイル: vpn.py プロジェクト: jiang1231/BTBU-Spider
    def login(self):
        login_url = "https://vpn.btbu.edu.cn/dana-na/auth/url_default/login.cgi"
        login_data = {'tz_offset': '480',
                      'username': self.id,
                      'password': self.internet_pwd,
                      'realm': '教师',
                      'btnSubmit': '登陆'}

        # 必须设置超时时间,超时证明密码不正确,服务器响应时间太长了
        try:
            r = self.s.post(login_url, data=login_data, timeout=2)
        except Exception as e:
            logger.error(e.message)
            raise Exception("error:上网登录密码错误")

        # 判断密码正确:
        if not re.match(r'.+p=failed', r.url) is None:
            utils.incr(settings.VPN_FAIL_KEY)
            if utils.over_limit(settings.VPN_FAIL_KEY):
                logger.error("vpn登录失败超过限制: %d" % settings.fail_count_limit)
            logger.warning("vpn密码不对 %s,vpn登录失败超过 %s次" % (str(login_data), utils.get(settings.VPN_FAIL_KEY)))
            raise utils.PasswordError("error:上网登录密码错误,不要在盲目尝试啦")

        soup = bs4.BeautifulSoup(r.text.encode("gbk", errors='replace').decode("gbk"), 'html.parser')
        # 在特殊情况下才能拿到cookies
        DSIDFormDataStrs = soup.find_all(id="DSIDFormDataStr")
        if len(DSIDFormDataStrs) > 0:
            formdatastr = DSIDFormDataStrs[0]['value']
            continue_data = {"btnContinue": "%E7%BB%A7%E7%BB%AD%E4%BC%9A%E8%AF%9D",
                             "FormDataStr": formdatastr}
            self.s.post(login_url, data=continue_data, verify=False, allow_redirects=False)

        if not self.s.cookies.get('DSID'):
            logger.error("error:查询次数太多")
            raise Exception("error:查询次数太多,学校vpn禁止了ip,没人的时候再来吧~~")
        logger.info('succeed logging into vpn ...')