Ejemplo n.º 1
0
 def __init__(self, username=None, password=None):
     self.s = MySession()
     self.dm = Dama()
     self.username = username
     self.password = password
     self.uuid = ''
     self.msg = ''  # res
Ejemplo n.º 2
0
    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