Example #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
    def crack(self):
        result = []
        v = VectorTools()
        # 装载训练数据集
        with open(os.path.join(current_dir, 'imageset.dat'), 'rb+') as f:
            imageset = pickle.load(f)
        for letter in self.handle_split_image():
            guess = []
            for image in imageset:
                for x, y in image.items():
                    if len(y) != 0:
                        guess.append((v.relation(y[0], self.buildvector(letter)), x))
            guess.sort(reverse=True)
            neighbors = guess[:10]  # 距离最近的十个向量
            class_votes = {}  # 投票
            for neighbor in neighbors:
                class_votes.setdefault(neighbor[-1], 0)
                class_votes[neighbor[-1]] += 1
            sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)
            result.append(sorted_votes[0][0])
        return ''.join(result)

    def __str__(self):
        return self.crack()


if __name__ == "__main__":
    r = requests.get(URL.zhengfang_captcha())
    im = Image.open(BytesIO(r.content))
    print(ZhengfangCaptcha(im))