def create_account(username, password, email, birthday, captchakey2, captchatimeout): if password is not None: _validate_password(password) print("Attempting to create user {user}:{pw}. Opening browser...".format(user=username, pw=password)) if captchakey2 != None: dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = user_agent #driver = webdriver.PhantomJS(desired_capabilities=dcap) driver = PhantomJS(desired_capabilities=dcap) else: #driver = webdriver.Chrome() driver = Chrome() driver.set_window_size(600, 600) # Input age: 1992-01-08 print("Step 1: Verifying age using birthday: {}".format(birthday)) driver.get("{}/sign-up/".format(BASE_URL)) assert driver.current_url == "{}/sign-up/".format(BASE_URL) elem = driver.find_element_by_name("dob") # Workaround for different region not having the same input type driver.execute_script("var input = document.createElement('input'); input.type='text'; input.setAttribute('name', 'dob'); arguments[0].parentNode.replaceChild(input, arguments[0])", elem) elem = driver.find_element_by_name("dob") elem.send_keys(birthday) elem.submit() # Todo: ensure valid birthday # Create account page print("Step 2: Entering account details") assert driver.current_url == "{}/parents/sign-up".format(BASE_URL) user = driver.find_element_by_name("username") user.clear() user.send_keys(username) _validate_username(driver, username) elem = driver.find_element_by_name("password") elem.clear() elem.send_keys(password) elem = driver.find_element_by_name("confirm_password") elem.clear() elem.send_keys(password) elem = driver.find_element_by_name("email") elem.clear() elem.send_keys(email) elem = driver.find_element_by_name("confirm_email") elem.clear() elem.send_keys(email) driver.find_element_by_id("id_public_profile_opt_in_1").click() driver.find_element_by_name("terms").click() if captchakey2 == None: #Do manual captcha entry print("You did not pass a 2captcha key. Please solve the captcha manually.") elem = driver.find_element_by_class_name("g-recaptcha") driver.execute_script("arguments[0].scrollIntoView(true);", elem) # Waits 1 minute for you to input captcha try: WebDriverWait(driver, 60).until(EC.text_to_be_present_in_element_value((By.NAME, "g-recaptcha-response"), "")) print("Captcha successful. Sleeping for 1 second...") time.sleep(1) except TimeoutException, err: print("Timed out while manually solving captcha")
def create_account(username, password, email, birthday, captchakey2, captchatimeout): if password: _validate_password(password) print("Attempting to create user {user}:{pw}. Opening browser...".format( user=username, pw=password)) if captchakey2: dcap = dict(DesiredCapabilities.PHANTOMJS) dcap[ "phantomjs.page.settings.userAgent"] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36' driver = PhantomJS(desired_capabilities=dcap) else: driver = Chrome() driver.set_window_size(600, 600) # Input age: 1992-01-08 print("Step 1: Verifying age using birthday:", birthday) driver.get("{}/sign-up/".format(BASE_URL)) assert driver.current_url == "{}/sign-up/".format(BASE_URL) elem = driver.find_element_by_name("dob") # Workaround for different region not having the same input type driver.execute_script( "var input = document.createElement('input'); input.type='text'; input.setAttribute('name', 'dob'); arguments[0].parentNode.replaceChild(input, arguments[0])", elem) elem = driver.find_element_by_name("dob") elem.send_keys(birthday) elem.submit() # Create account page print("Step 2: Entering account details") assert driver.current_url == "{}/parents/sign-up".format(BASE_URL) user = driver.find_element_by_name("username") user.clear() user.send_keys(username) _validate_username(driver, username) elem = driver.find_element_by_name("password") elem.clear() elem.send_keys(password) elem = driver.find_element_by_name("confirm_password") elem.clear() elem.send_keys(password) elem = driver.find_element_by_name("email") elem.clear() elem.send_keys(email) elem = driver.find_element_by_name("confirm_email") elem.clear() elem.send_keys(email) driver.find_element_by_id("id_public_profile_opt_in_1").click() driver.find_element_by_name("terms").click() if not captchakey2: #Do manual captcha entry print( "You did not pass a 2captcha key. Please solve the captcha manually." ) elem = driver.find_element_by_class_name("g-recaptcha") driver.execute_script("arguments[0].scrollIntoView(true);", elem) # Waits 90 seconds for you to input captcha try: WebDriverWait(driver, 90).until( EC.text_to_be_present_in_element_value( (By.NAME, "g-recaptcha-response"), "")) print("Captcha successful.") except TimeoutException: print("Timed out while manually solving captcha") else: # Now to automatically handle captcha print("Starting autosolve recaptcha") html_source = driver.page_source gkey_index = html_source.find( "https://www.google.com/recaptcha/api2/anchor?k=") + 47 gkey = html_source[gkey_index:gkey_index + 40] recaptcharesponse = "Failed" while (recaptcharesponse == "Failed"): recaptcharesponse = openurl("http://2captcha.com/in.php?key=" + captchakey2 + "&method=userrecaptcha&googlekey=" + gkey + "&pageurl=" + driver.current_url) captchaid = recaptcharesponse[3:] recaptcharesponse = "CAPCHA_NOT_READY" elem = driver.find_element_by_class_name("g-recaptcha") print("We will wait 10 seconds for captcha to be solved by 2captcha") start_time = time.monotonic() timedout = False while recaptcharesponse == "CAPCHA_NOT_READY": time.sleep(10) elapsedtime = time.monotonic() - start_time if elapsedtime > captchatimeout: print("Captcha timeout reached. Exiting.") timedout = True break print("Captcha still not solved, waiting another 10 seconds.") recaptcharesponse = "Failed" while (recaptcharesponse == "Failed"): recaptcharesponse = openurl( "http://2captcha.com/res.php?key={}&action=get&id={}". format(captchakey2, captchaid)) if timedout == False: solvedcaptcha = recaptcharesponse[3:] elem = driver.find_element_by_name("g-recaptcha-response") elem = driver.execute_script( "arguments[0].style.display = 'block'; return arguments[0];", elem) elem.send_keys(solvedcaptcha) print("Solved captcha") try: user.submit() except StaleElementReferenceException: print("Error StaleElementReferenceException!") try: _validate_response(driver) except Exception: print("Failed to create user:"******"Account successfully created.") driver.quit() return True
def mainprocess(captchakey, saveloc): user_agent = ( "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36" ) dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = user_agent driver = PhantomJS(desired_capabilities=dcap, service_args=['--load-images=no']) #driver = webdriver.PhantomJS() driver.set_window_size(1600, 1200) driver.implicitly_wait(10) driver.get("https://club.pokemon.com/us/pokemon-trainer-club") driver.find_element_by_id("user-account-signup").click() delay = 5 # seconds try: myElem = WebDriverWait(driver, delay).until( EC.presence_of_element_located((By.ID, 'id_dob'))) except TimeoutException: logging.info("Loading took too much time!") elem = driver.find_element_by_name("dob") driver.execute_script( "var input = document.createElement('input'); input.type='text'; input.setAttribute('name', 'dob'); arguments[0].parentNode.replaceChild(input, arguments[0])", elem) randdate = datetime.date(randint(1975, 1990), randint(1, 12), randint(1, 28)) elem = driver.find_element_by_name("dob") elem.send_keys(datetime.datetime.strftime(randdate, '%Y-%m-%d')) driver.save_screenshot('bday4.png') time.sleep(1) delay = 5 # seconds try: myElem = WebDriverWait(driver, delay).until( EC.presence_of_element_located(( By.XPATH, '//*[@id="sign-up-theme"]/section/div/div/div[1]/form/div[2]/div/div/label' ))) except TimeoutException: logging.info("Loading took too much time!") myElem.click() time.sleep(1) delay = 5 # seconds try: myElem = WebDriverWait(driver, delay).until( EC.presence_of_element_located(( By.XPATH, '//*[@id="sign-up-theme"]/section/div/div/div[1]/form/div[2]/div/div/div/div/ul/li[168]' ))) except TimeoutException: logging.info("Loading took too much time!") myElem.click() driver.find_element_by_xpath( '//*[@id="sign-up-theme"]/section/div/div/div[1]/form/input[2]').click( ) randomemail = ''.join( random.choice(string.ascii_uppercase + string.digits) for _ in range(10)) randompass = ''.join( random.SystemRandom().choice(string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation) for _ in range(10)) driver2 = PhantomJS(desired_capabilities=dcap, service_args=['--load-images=no']) driver2.set_window_size(1600, 1200) driver2.get("https://temp-mail.org/en/option/change/") driver2.find_element_by_name("mail").send_keys(randomemail) doms = Select(driver2.find_element_by_xpath('//*[@id="domain"]')) x = doms.options domain = str(x[0].text) time.sleep(3) driver2.find_element_by_id('postbut').click() driver2.get("https://temp-mail.org/en/option/refresh/") driver.save_screenshot('screenshot.png') driver.find_element_by_id('id_username').send_keys(randomemail) driver.find_element_by_id('check-availability-username').click() delay = 5 # seconds try: myElem = WebDriverWait(driver, delay).until( EC.presence_of_element_located( (By.XPATH, '//*[@id="username-suggestion"]/div/h3'))) if driver.find_element_by_xpath( '//*[@id="username-suggestion"]/div').find_element_by_tag_name( 'h3').text == 'Username is invalid.': logging.info('Username already in use exiting') exit() except TimeoutException: logging.info("Loading took too much time!") driver.find_element_by_id('id_password').send_keys(randompass) driver.find_element_by_id('id_confirm_password').send_keys(randompass) driver.find_element_by_id('id_email').send_keys(randomemail + domain) driver.find_element_by_id('id_confirm_email').send_keys(randomemail + domain) driver.find_element_by_id('id_screen_name').send_keys(randomemail) driver.find_element_by_id('check-availability-screen-name').click() delay = 5 # seconds try: myElem = WebDriverWait(driver, delay).until( EC.presence_of_element_located(( By.XPATH, '//*[@id="user-signup-create-account-form"]/fieldset[1]/div/div/div[1]/div/div[11]/div/div/h3' ))) if driver.find_element_by_xpath( '//*[@id="user-signup-create-account-form"]/fieldset[1]/div/div/div[1]/div/div[11]/div/div' ).find_element_by_tag_name( 'h3' ).text == 'This screen name already exists. Please try the following:': logging.info('Screen Name already in use exiting') exit() except TimeoutException: logging.info("Loading took too much time!") driver.find_element_by_id('id_terms').click() logging.info("Starting captcha solve") # AutoCapcha autocaptcha(captchakey, driver) driver.find_element_by_xpath( '//*[@id="user-signup-create-account-form"]/fieldset[2]/div/input' ).click() driver.close() logging.info("Waiting on Email") for z in range(0, 10): try: delay = 60 # seconds try: myElem = WebDriverWait(driver2, delay).until( EC.presence_of_element_located( (By.XPATH, '//*[@id="mails"]/tbody'))) except TimeoutException: if z == 9: logging.info("Can't Find the email sorries :(") exit() else: logging.info("No Email Yet " + str(z + 1) + "/10") driver2.refresh() except: continue myElem.click() time.sleep(5) elems = driver2.find_elements_by_tag_name('a') time.sleep(5) for elem in elems: test = str(elem.get_attribute("href")) if "https://club.pokemon.com/us/pokemon-trainer-club/activated/" in test: actions = ActionChains(driver2) actions.move_to_element(elem).perform() elem.click() break time.sleep(10) driver2.quit() logging.info("Account created saving details") with open(os.path.join(saveloc, 'accounts.txt'), "a") as myfile: myfile.write("\n" + randomemail + ' - ' + randompass) logging.info(randomemail + " account created")