import colored import lxml.html import names import random import re import requests import string import time from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.firefox.options import Options def to_bool(message): while True: answer = input(message) if answer == "y": return True if answer == "n": return False def get_proxy_list(): response = requests.get("https://free-proxy-list.net/") parser = lxml.html.fromstring(response.text) result = [] for i in parser.xpath("//tbody/tr"): if i.xpath(".//td[7][contains(text(),\"yes\")]"): proxy_url = ":".join([i.xpath(".//td[1]/text()")[0], i.xpath(".//td[2]/text()")[0]]) result.append(proxy_url) return result def create_valid_password(): header1 = random.choice(string.ascii_uppercase) header2 = random.choice(string.ascii_lowercase) volume = "".join(random.choice(string.ascii_letters + string.digits) for _ in range(6)) footer = "".join(random.choice(string.digits) for _ in range(4)) return header1 + header2 + volume + footer def create_random_user(): print("") print("{}Creating random user...{}".format(colored.fg(11), colored.attr(0))) user = {} user["gender"] = random.choice(["male", "female"]) user["name"] = names.get_full_name(user["gender"]) user["email"] = "".join(random.choice(string.ascii_letters + string.digits) for _ in range(10)) + "@gmail.com" user["passwd"] = create_valid_password() user["bmonth"] = "{:02}".format(random.choice(range(1, 13))) user["bday"] = "{:02}".format(random.choice(range(1, 29))) user["byear"] = str(random.choice(range(1960, 2001))) print("Name: {}".format(user["name"])) print("email: {}".format(user["email"])) print("passwd: {}".format(user["passwd"])) print("gender: {}".format(user["gender"])) print("birthday: {}".format(user["bmonth"] + "/" + user["bday"] + "/" + user["byear"])) print("") return user def create_new_account(): while True: try: user = create_random_user() options = Options() profile = webdriver.FirefoxProfile() caps = None profile.set_preference("permissions.default.image", 2) if headless: options.add_argument("--headless") if use_proxies: sel_proxy = random.choice(proxy_list) print("Using proxy {}".format(sel_proxy)) caps = DesiredCapabilities.FIREFOX caps["marionette"] = True caps["proxy"] = { "proxyType": "MANUAL", "httpProxy": sel_proxy, "ftpProxy": sel_proxy, "sslProxy": sel_proxy } br = webdriver.Firefox(firefox_options = options, firefox_profile = profile, capabilities = caps) br.implicitly_wait(30) br.set_page_load_timeout(60) print("Loading website...") br.get("https://www.nike.com/launch/") time.sleep(2) def open_element(path): link = br.find_element_by_xpath(path) link.click() def fill_input(path, data): input_box = br.find_element_by_xpath(path) input_box.send_keys(data) print("Opening account creation form...") open_element("//button[@data-qa='join-login']") open_element("//form[@id='nike-unite-loginForm']/div[7]/a") print("Filling form with data...") fill_input("//input[@name='emailAddress']", user["email"]) fill_input("//input[@name='password']", user["passwd"]) fill_input("//input[@name='firstName']", user["name"].split()[0]) fill_input("//input[@name='lastName']", user["name"].split()[1]) open_element("//select[@id='nike-unite-date-id-mm']/option[@value='" + user["bmonth"] + "']") open_element("//select[@id='nike-unite-date-id-dd']/option[@value='" + user["bday"] + "']") open_element("//select[@id='nike-unite-date-id-yyyy']/option[@value='" + user["byear"] + "']") if user["gender"] == "male": open_element("//ul[@data-componentname='gender']/li[1]/span") else: open_element("//ul[@data-componentname='gender']/li[2]/span") if not test_run: print("Submitting form...") open_element("//input[@value='CREATE ACCOUNT']") open_element("//input[@placeholder='Enter Code']") else: print("This is a test run. No submission will be made.") print("{}Account generated succesfully!{}".format(colored.fg(10), colored.attr(0))) with open("output.data", "a") as f: if use_proxies: f.write("{}:{} {}\n".format(user["email"], user["passwd"], sel_proxy)) else: f.write("{}:{}\n".format(user["email"], user["passwd"])) print("Account credentials appended to 'output.data'.") br.quit() break except KeyboardInterrupt: if br: br.quit() quit() except: if br: br.quit() print("{}Encountered a problem. Let's try again...{}".format(colored.fg(9), colored.attr(0))) if __name__ == "__main__": print("") print("{}Nike-scrapper Account Generator{}".format(colored.fg(11), colored.attr(0))) print("Let's set some options...") while True: ac_count = int(input("How many accounts would you like to generate?: ")) headless = to_bool("Would you like to run headless? [y/n]: ") test_run = to_bool("Would you like to make this a test-run? [y/n]: ") use_proxies = to_bool("Utilize proxy servers? [y/n]: ") print("---") print("No. of accounts: {}".format(ac_count)) print("Run headless: {}".format(headless)) print("Test run: {}".format(test_run)) print("Use proxy: {}".format(use_proxies)) print("---") if to_bool("Is all this correct? [y/n]: "): break for i in range(ac_count): if use_proxies and i % 10 == 0: print("") print("{}Getting proxy list...{}".format(colored.fg(11), colored.attr(0))) proxy_list = get_proxy_list() for i in proxy_list: print(i) create_new_account()