예제 #1
0
def write_article(date, body):
    url = 'http://gall.dcinside.com/mgallery/board/write/?id=nendoroid'
    xpaths = {
        'nick': "//input[@name='name']",
        'pw': "//input[@name='password']",
        'title': "//input[@name='subject']",
        'body': "//div[@id='tx_canvas_source_holder']",
    }
    dcap = dict(dc.PHANTOMJS)
    dcap["phantomjs.page.settings.userAgent"] = (
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 "
        "(KHTML, like Gecko) Chrome/16.0.82")

    title_format = '[알림] 굿스마샵 {} 넨도 예약 마감 D-{}'
    date = date.replace(hour=12)
    today = datetime.now(
    )  #.replace(hour=0, minute=0, second=0, microsecond=0)
    dday = date - today

    if dday.days > 3 or dday.days < 0:
        return

    title = title_format.format(date.strftime('%m월%d일'), dday.days)
    print(title)

    driver = PhantomJS(desired_capabilities=dcap)

    driver.get(url)
    driver.find_element_by_xpath(xpaths['nick']).send_keys('넨갤봇')
    driver.find_element_by_xpath(xpaths['pw']).send_keys('2648')
    driver.find_element_by_xpath(xpaths['title']).send_keys(title)
    WebDriverWait(driver, 2)

    html = driver.find_element_by_xpath("//div[@id='tx_switchertoggle']")
    bd = driver.find_element_by_xpath(xpaths['body'])

    def make_body(date, body):
        b = '<p>{} 정오에 예약이 마감됩니다.</p><br/><p>클릭하면 제품 페이지로 이동합니다.</p><br/><ul>'.format(
            date.strftime('%m월 %d일'))
        for name, link in body:
            b += ('<li><a href="{}" target="_blank">{}</a></li>'.format(
                link, name))
        b += '</ul>'
        return b

    full_body = make_body(date, body)
    print(full_body)

    actions = webdriver.ActionChains(driver)
    actions.move_to_element(html)
    actions.click()
    actions.move_to_element(bd)
    actions.click()
    actions.pause(1)
    actions.send_keys(full_body)
    actions.pause(1)
    actions.perform()

    submit = driver.find_element_by_xpath("//p[@class='btn_box_right']//input")
    submit.click()
    WebDriverWait(driver, 1)
    #print(driver.get_log('browser'))
    #print(driver.get_log('har'))
    driver.save_screenshot('a.png')
    driver.close()
    print('done!')
예제 #2
0
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")