Ejemplo n.º 1
0
class Nike():

	def __init__(self):
		with open('config.json') as file:
			self.config = json.load(file)
			file.close()
		if self.config['password']['random']:
			self.password = None
		else:
			self.password = self.config['password']['fixed']
		self.generator = Sensor()

	def __get_session(self, proxy):
		s = requests.Session()
		s.mount('https://', MyAdapter())
		sData = self.generator.generateSensorData()
		payload = {'sensor_data': sData}
		s.post('https://www.nike.com/_bm/_data', json=payload)
		self.generator.cookie = s.cookies['_abck']
		sData = self.generator.generatesensordata1()
		payload = {'sensor_data': sData}
		s.post('https://www.nike.com/_bm/_data', json=payload)
		s.headers.update({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36","Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9,ms;q=0.8"})
		s.cookies["CONSUMERCHOICE"]="gb/en_gb"
		s.cookies["NIKE_COMMERCE_COUNTRY"]="GB"
		s.cookies["NIKE_COMMERCE_LANG_LOCALE"]="en_GB"
		s.cookies["nike_locale"]="gb/en_gb"
		return s

	def create_account(self, proxy):
		s = self.__get_session(proxy)
		genders = ["M", "F"]
		gender = choice(genders)
		while True:
			name = faker.name()
			if "." not in name.split()[0]:
				break
			else:
				pass
		emailChoices = []
		emailChoices.append("{}{}{}@{}".format(name.split()[0], name.split()[1], randint(11,9999), self.config['domain']))
		emailChoices.append("{}{}{}@{}".format(name.split()[0][0], name.split()[1], randint(11,9999), self.config['domain']))
		if self.config['domain'] != "gmail.com":
			emailChoices.append("{}{}@{}".format(name.split()[0], randint(111,999), self.config['domain']))
		email = choice(emailChoices)
		if not self.password:
			allchar = string.ascii_letters + string.digits
			while True:
				password = "".join(choice(allchar) for x in range(randint(8, 12)))
				if any(i.isdigit() for i in password) and any(i.isupper() for i in password) and any(i.islower() for i in password):
					break
				else:
					continue
		else:
			password = self.password
		payload = {
			'account': {
				'email': email.lower(),
				'passwordSettings': {
					'password': password,
					'passwordConfirm': password
				}
			},
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'welcomeEmailTemplate': 'TSD_PROF_COMM_WELCOME_V1.0',
			'registrationSiteId': 'snkrsweb',
			'username': email.lower(),
			'firstName': name.split()[0],
			'lastName': name.split()[1],
			'dateOfBirth': "{}-{}-{}".format(randint(1979,1996), randint(10,12), randint(10,28)),
			'country': self.config['locale'],
			'gender': gender,
			'receiveEmail': True,
			'emailAddress': email.lower(),
			'password': password
		}
		params = {
			'appVersion': '440',
			'experienceVersion': '369',
			'uxid': 'com.nike.commerce.snkrs.web',
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'backendEnvironment': 'identity',
			'browser': 'Google Inc.',
			'os': 'undefined',
			'mobile': 'false',
			'native': 'false',
			'visitor': uuid.uuid4(),
			'visit': '1',
			'language': '{}-{}'.format(self.config['language'], self.config['locale'])
		}
		r = s.post("https://unite.nike.com/access/users/v1", json=payload, params=params, proxies=proxy)
		print(r.text)
		if r.status_code == 201:
			return True, email, password
		else:
			return False, email, password

	def account_login(self, email, password, proxy):
		s = self.__get_session(proxy)
		payload = {
			'client_id': 'PbCREuPr3iaFANEDjtiEzXooFl7mXGQ7',
			'grant_type': 'password',
			'password': password,
			'username': email,
			'ux_id': 'com.nike.commerce.snkrs.web'
		}
		params = {
			'appVersion': '440',
			'experienceVersion': '369',
			'uxid': 'com.nike.commerce.snkrs.web',
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'backendEnvironment': 'identity',
			'browser': 'Google Inc.',
			'os': 'undefined',
			'mobile': 'false',
			'native': 'false',
			'visitor': uuid.uuid4(),
			'visit': '1',
			'language': '{}-{}'.format(self.config['language'], self.config['locale'])
		}
		r = s.post("https://unite.nike.com/login", json=payload, params=params, proxies=proxy)
		try:
			data = r.json()
			return True, data['access_token']
		except:
			return False, None

	def request_sms(self, number, accessToken, proxy):
		s = self.__get_session(proxy)
		params = {
			'appVersion': '440',
			'experienceVersion': '369',
			'uxid': 'com.nike.commerce.snkrs.web',
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'backendEnvironment': 'identity',
			'browser': 'Google Inc.',
			'os': 'undefined',
			'mobile': 'false',
			'native': 'false',
			'visit': '1',
			'visitor': uuid.uuid4(),
			'phone': number,
			'language': '{}-{}'.format(self.config['language'], self.config['locale']),
			'country': self.config['locale']
		}
		s.headers['authorization'] = 'Bearer {}'.format(accessToken)
		r = s.post('https://unite.nike.com/sendCode', params=params, json={}, proxies=proxy)
		if r.status_code == 202:
			return True
		else:
			return False

	def verify_code(self, code, accessToken, proxy):
		s = self.__get_session(proxy)
		params = {
			'appVersion': '440',
			'experienceVersion': '369',
			'uxid': 'com.nike.commerce.snkrs.web',
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'backendEnvironment': 'identity',
			'browser': 'Google Inc.',
			'os': 'undefined',
			'mobile': 'false',
			'native': 'false',
			'visit': '1',
			'visitor': uuid.uuid4(),
			'code': code,
			'language': '{}-{}'.format(self.config['language'], self.config['locale'])
		}
		s.headers['authorization'] = 'Bearer {}'.format(accessToken)
		r = s.post("https://unite.nike.com/verifyCode", params=params, json={}, proxies=proxy)
		if r.status_code == 200:
			return True
		else:
			return False

	def check_verification(self, accessToken, proxy):
		s = self.__get_session(proxy)
		params = {
			'appVersion': '440',
			'experienceVersion': '369',
			'uxid': 'com.nike.commerce.snkrs.web',
			'locale': '{}_{}'.format(self.config['language'], self.config['locale']),
			'backendEnvironment': 'identity',
			'browser': 'Google Inc.',
			'os': 'undefined',
			'mobile': 'false',
			'native': 'false',
			'visit': '1',
			'visitor': uuid.uuid4(),
			'viewId': 'commerce',
			'language': '{}-{}'.format(self.config['language'], self.config['locale'])
		}
		s.headers['authorization'] = 'Bearer {}'.format(accessToken)
		r = s.get('https://unite.nike.com/getUserService', params=params, proxies=proxy)
		try:
			data = r.json()
			if data['verifiedphone']:
				return True
			else:
				return False
		except:
			return False

	def __get_driver(self):
		chrome_options = Options()
		# pluginfile = 'proxy_auth_plugin.zip'
		# with zipfile.ZipFile(pluginfile, 'w') as zp:
		# 	zp.writestr("manifest.json", manifest_json)
		# 	zp.writestr("background.js", background_js)
		# chrome_options.add_extension(pluginfile)
		chrome_options.add_argument("--start-maximized")
		prefs = {"profile.managed_default_content_settings.images":2}
		chrome_options.add_experimental_option("prefs", prefs)
		driver = webdriver.Chrome(executable_path='C:\\Users\\Ryan\\Documents\\YEEZUS\\9 - CartChefs Nike\\Account Generator\\chromedriver.exe', chrome_options=chrome_options)
		return driver

	def create_account_sel(self, number, proxy):
		driver = self.__get_driver()
		driver.get("https://www.nike.com/gb/launch/")
		while True:
			name = faker.name()
			if "." not in name.split()[0]:
				break
			else:
				pass
		emailChoices = []
		emailChoices.append("{}{}{}@{}".format(name.split()[0], name.split()[1], randint(11,9999), self.config['domain']))
		emailChoices.append("{}{}{}@{}".format(name.split()[0][0], name.split()[1], randint(11,9999), self.config['domain']))
		if self.config['domain'] != "gmail.com":
			emailChoices.append("{}{}@{}".format(name.split()[0], randint(111,999), self.config['domain']))
		email = choice(emailChoices)
		if not self.password:
			allchar = string.ascii_letters + string.digits
			while True:
				password = "".join(choice(allchar) for x in range(randint(8, 12)))
				if any(i.isdigit() for i in password):
					break
				else:
					continue
		else:
			password = self.password
		# print("{}:{}".format(email, password))
		sleep(2)
		driver.find_element_by_xpath("//*[contains(text(), 'Yes, I Accept')]").click()
		sleep(1)
		driver.find_element_by_xpath("//a[@aria-label='Join or Log In']").click()
		driver.find_element_by_xpath("//*[contains(text(), 'Join now.')]").click()
		driver.find_element_by_name('emailAddress').send_keys(email)
		driver.find_element_by_name('password').send_keys(password)
		driver.find_element_by_name('firstName').send_keys(name.split()[0])
		driver.find_element_by_name('lastName').send_keys(name.split()[1])
		driver.find_element_by_name('dateOfBirth').send_keys("{}{}{}".format(randint(10,28), randint(10,12), randint(1979,1996)))
		driver.find_element_by_xpath("//*[contains(text(), 'Male')]").click()
		driver.find_element_by_xpath("//input[@value='CREATE ACCOUNT']").click()
		sleep(5)
		driver.find_element_by_xpath("//input[@placeholder='Mobile Number']").send_keys(number)
		driver.find_element_by_xpath("//input[@value='Send Code']").click()
		return True, email, password, driver

	def submit_code_sel(self, driver, code, proxy):
		driver.find_element_by_xpath("//input[@placeholder='Enter Code']").send_keys(code)
		driver.find_element_by_xpath("//input[@value='CONTINUE']").click()
		sleep(5)
		driver.close()
		return True