コード例 #1
0
ファイル: JDongW.py プロジェクト: panhong2009/JDong
 def __init__(self, username=None, password=None):
     self.s = MySession()
     self.dm = Dama()
     self.username = username
     self.password = password
     self.uuid = ''
     self.msg = ''  # res
コード例 #2
0
ファイル: JDongW.py プロジェクト: panhong2009/JDong
    def reg(self):
        """自动注册"""
        self.username = config['reg']['name_prx'] + ''.join(
            random.sample(string.digits, config['reg']['name_len']))
        self.password = ''.join(
            random.sample(string.letters +
                          string.digits, int(config['reg']['password']))
        ) if config['reg']['password'].isdigit() else config['reg']['password']
        self.s = MySession()

        try:
            r = self.s.get('https://reg.jd.com/reg/person')
            d = PyQuery(r.text)
            r = self.s.get('https://reg.jd.com/validate/isPinEngaged?pin=' +
                           self.username + '&r=' + str(time.time()))
        except:
            print "[error][reg]" + self.username
            return False
        code_url = d('.item-ifo img').attr('onclick')
        code_url = 'http:' + code_url[code_url.find("+") +
                                      2:code_url.find("'+")] + str(
                                          int(time.time()))
        try:
            vcode = self.dm.recv_byte(self.s.get(code_url).content)
            if not vcode:
                raise
        except:
            print "[info][reg]get vcode failed " + self.username
            return False

        last_input = d('input[type=hidden]')[-1]
        data = {
            'regType': 'person',
            'schoolid': '',
            'mobileCode': '',
            'uuid': d('input#uuid').val(),
            'regName': self.username,
            'pwd': self.password,
            'pwdRepeat': self.password,
            'authcode': vcode,
            last_input.name: last_input.value
        }
        r = self.s.post('https://reg.jd.com/reg/regService?r=' +
                        str(time.time()),
                        data=data)
        if r.content.find('info') > -1:
            return False
        else:
            confirm_url = r.content[r.content.find('http'):r.content.find('"}'
                                                                          )]
            r = self.s.get(confirm_url)
            with file('res/users.txt', 'a') as f:
                f.write(self.username + "---" + self.password + '\r\n')

            print "[success][reg]" + self.username
            self.__setSession()
            return True
コード例 #3
0
ファイル: JDongM.py プロジェクト: panhong2009/JDong
    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