Exemple #1
0
 def login(self, account, password):
     """
     登录教务系统 jwxt.njupt.edu.cn
     :param account: 南邮学号
     :param password: 密码
     :return: {'code': 1, "msg": "登录失败"} 或 {'code': 0, 'msg': '登录成功'}
     """
     captcha_code = ZhengfangCaptcha(self.get_image(
         URL.zhengfang_captcha())).crack()
     data = {
         "__VIEWSTATE": self._get_viewstate(URL.zhengfang_login()),
         'txtUserName': account,
         'TextBox2': password,
         'RadioButtonList1': "%D1%A7%C9%FA",
         "txtSecretCode": captcha_code,
         "Button1": "",
         "hidPdrs": "",
         "hidsc": ""
     }
     result = self._login_execute(url=URL.zhengfang_login(), data=data)
     if result['code'] == 2:
         # 如果验证码错误,尝试递归重复登录
         return self.login(account, password)
     result['success'] = not result['code']
     if result['success']:
         self.verify = True
     else:
         raise AuthenticationException(result['msg'])
     return result
Exemple #2
0
 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))
Exemple #3
0
def spilt2chars():
    """
    分割已有的数据为字符并保存
    """
    try:
        shutil.rmtree('captcha_chars')
    except:
        pass
    os.mkdir("captcha_chars")
    values = "abcdefghijklmnopqrstuvwxyz1234567890"
    for value in values:
        os.mkdir('captcha_chars/{}'.format(value))

    file_names = os.listdir('captchas')
    for file_name in file_names:  #
        if not os.path.isdir(file_name) and file_name != '.DS_Store':
            values = file_name[:4]
            im = Image.open('captchas/{}'.format(file_name))
            captcha = ZhengfangCaptcha(im)
            for im_part, value in zip(captcha.handle_split_image(), values):
                m = hashlib.md5()
                m.update("{}{}".format(time.time(), value).encode('utf8'))
                im_part.save("captcha_chars/{}/{}.png".format(value, m.hexdigest()))
Exemple #4
0
 def login(self, account, password):
     # FIXME: 登录不可靠
     captcha_code = ZhengfangCaptcha(self.get_image(self.URLs.CAPTCHA)).crack()
     data = {
         "__VIEWSTATE": self._get_viewstate(self.URLs.LOGIN),
         'txtUserName': account,
         'TextBox2': password,
         'RadioButtonList1': "%D1%A7%C9%FA",
         "txtSecretCode": captcha_code,
         "Button1": "",
         "hidPdrs": "",
         "hidsc": ""
     }
     result = self._login_execute(url=self.URLs.LOGIN, data=data)
     if result['code'] == 2:
         # 如果验证码错误,尝试递归重复登录
         return self.login(account, password)
     result['success'] = not result['code']
     if result['success']:
         self.verify = True
     else:
         raise AuthenticationException(result['msg'])
     return result
Exemple #5
0
 def login_by_username(self):
     captcha_code = ZhengfangCaptcha(self.s.get_image(
         self.URLs.CAPTCHA)).crack()
     data = {
         "__VIEWSTATE": self.s._get_viewstate(self.URLs.USERNAME_LOGIN),
         'txtUserName': self.username,
         'TextBox2': self.password,
         'RadioButtonList1': "%D1%A7%C9%FA",
         "txtSecretCode": captcha_code,
         "Button1": "",
         "hidPdrs": "",
         "hidsc": ""
     }
     r = self.s.post(url=self.URLs.USERNAME_LOGIN, data=data)
     if r.ok:
         if "请到信息维护中完善个人联系方式" in r.text:
             self.verified = True
             return {'success': True, 'msg': '登录成功'}
         elif "密码错误" in r.text:
             raise AuthenticationException('密码错误')
         elif "验证码不正确" in r.text:
             return self.login_by_username()
         else:
             raise AuthenticationException('未知错误')
Exemple #6
0
        os.mkdir('captcha_chars/{}'.format(value))

    file_names = os.listdir('captchas')
    for file_name in file_names:  #
        if not os.path.isdir(file_name) and file_name != '.DS_Store':
            values = file_name[:4]
            im = Image.open('captchas/{}'.format(file_name))
            captcha = ZhengfangCaptcha(im)
            for im_part, value in zip(captcha.handle_split_image(), values):
                m = hashlib.md5()
                m.update("{}{}".format(time.time(), value).encode('utf8'))
                im_part.save("captcha_chars/{}/{}.png".format(value, m.hexdigest()))


if __name__ == "__main__":
    # spilt2chars()
    letters = list('qwertyuiopasdfghjklzcxvbnm1234567890')
    # 将图像数据转为向量数据并保存
    imageset = []
    for letter in letters:
        try:
            for img in os.listdir('captcha_chars/{}/'.format(letter)):
                if img != "Thumbs.db" and img != ".DS_Store":
                    vector = ZhengfangCaptcha.buildvector(Image.open("captcha_chars/{}/{}".format(letter, img)))
                    imageset.append({letter: vector})
        except FileNotFoundError as e:
            pass

    with open('image_data.json', 'w') as f:
        json.dump(imageset, f)