def __init__(self, username=None, password=None): self.s = MySession() self.dm = Dama() self.username = username self.password = password self.uuid = '' self.msg = '' # res
def login(self, retries=3): logging.info('login start') if not retries: return False # 尝试恢复会话 if self.__getSession(): logging.info(self.username + u' restore success') return True # 重新登录 logging.info(self.username + u' try login') self.s = MySession() try: r = self.s.get('https://passport.m.jd.com/user/doLogin.action?v=t') except: return self.login(retries - 1) # 配置查询参数 d = PyQuery(r.text) sid_all = d('form').attr('action') self.sid_all = sid_all[sid_all.find('sid'):] self.sid_val = self.sid_all[4:] data = { 'returnurl': 'http://m.jd.com/user/home.action?' + self.sid_all, 'username': self.username, 'password': self.password, 'remember': True } # 登录需要验证码 vcode_flag = d('input#codeLevel').val() if vcode_flag: self.dm = Dama() vcode_url = d('.new-abtn-code #code').attr('src') vcode_val = '' while True: try: vcode_val = self.dm.recv_byte( self.s.get('https://passport.m.jd.com' + imgurl).content()) if not vcode_val or len(vcode_val) != 4: raise else: break except: logging.debug('error vcode' + vcode_val) continue data['validateCode'] = vcode_val data['codeKey'] = self.sid_val, data['codeLevel'] = d('input#codeLevel').val() # 登录 try: r = self.s.post( 'https://passport.m.jd.com/user/doLogin.action?' + self.sid_all, data) if r.url.find('home.action') < 0: if self.debug: print "[JDongM][login][9]login failed" raise except: logging.debug(r'login error, returned \n %s' % r.text) return self.login(retries - 1) self.__setSession() logging.info(self.username + ' login success') return True