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 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
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