def _get_captcha(self, url=URL.jwxt_captcha()): r = self.get(url) im = Image.open(BytesIO(r.content)) if url == URL.aolan_captcha(): return str(AolanCaptcha(im)) if url == URL.jwxt_captcha(): return str(ZhengfangCaptcha(im))
def login(self, account, password): """ 登录奥兰系统 jwxt.njupt.edu.cn :param account: 南邮学号、考生号、身份证号 :param password: 密码 :return: {'r': 1, "msg": "登录失败"} 或 {'r': 0, 'msg': '登录成功'} """ captcha_code = AolanCaptcha(self._url2image( URL.aolan_captcha())).crack() data = { "__VIEWSTATE": self._get_viewstate(URL.aolan_login()), '__VIEWSTATEGENERATOR': captcha_code, 'userbh': account, 'pas2s': hashlib.md5(password.upper().encode('utf8')).hexdigest(), "vcode": (URL.aolan_captcha()), "cw": "", "xzbz": "1", } return self._login_execute(url=URL.aolan_login(), data=data)
手动获取奥兰系统验证码的训练集 """ import hashlib import os import time from io import BytesIO import requests from PIL import Image from njupt.settings import BASE_DIR from njupt.urls import URL from njupt.utils.aolan.aolan_captcha import letters for i in range(100): r = requests.get(URL.aolan_captcha()) im = Image.open(BytesIO(r.content)) # 灰度处理 imgry = im.convert('L') # 二值处理 threshold = 220 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) out = imgry.point(table, '1') out.show() numbers = input("输入数值")
:param data_type: 提交的数据格式(可能是表单类型,也可能是json格式的字符串) :param kwargs: requests支持的参数,比如可以设置代理参数 :return: BeautifulSoup对象 """ # r = getattr(self, method)(url, json=json, data=data, params=params, **kwargs) # if r.ok: # soup = BeautifulSoup(r.text, 'lxml') # return soup # else: # raise ConnectionError("检查网络连接") try: # 出现网络连接问题,直接在该处抛出错误 r = getattr(self, method)(url, json=json, data=data, params=params, **kwargs) except ConnectionError: raise ConnectionError("请检查网络连接") else: if r.ok: # 状态码小于400为True soup = BeautifulSoup(r.text, 'lxml') return soup else: # 处理其他状态码 raise Exception('请确保能够正常访问当前页面: {}'.format(url)) if __name__ == "__main__": test_model = Model() test_model._get_captcha(URL.aolan_captcha())