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!')
class DLinkScanner(DeviceScanner): def __init__(self, gateway, admin_password): self.password = admin_password self.gateway = gateway self.driver = None self.success_init = True self.last_results = [] results = self._update_info() self.success_init = results is not None @Throttle(MIN_TIME_BETWEEN_SCANS) def _update_info(self): from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, StaleElementReferenceException from seleniumrequests import PhantomJS self.driver = PhantomJS( '/home/homeassistant/phantomjs-raspberrypi/bin/phantomjs') path = "http://" + self.gateway + "/info/Login.html" self.driver.get(path) delay = 15 # seconds try: WebDriverWait(self.driver, delay).until( EC.presence_of_element_located((By.ID, "admin_Password"))) _LOGGER.info('Logging in') self.driver.find_element_by_id('admin_Password').send_keys( self.password) self.driver.find_element_by_id('admin_Password').send_keys( Keys.RETURN) self.driver.find_element_by_id("logIn_btn").click() WebDriverWait(self.driver, delay).until( EC.element_to_be_clickable((By.ID, "clientInfo_circle"))) _LOGGER.info('Navigating to client list') self.driver.find_element_by_id("clientInfo_circle").click() # Bad timing, refresh elements attempts = 0 success = False while success is False and attempts < 4: try: WebDriverWait(self.driver, delay).until( EC.presence_of_element_located( (By.CLASS_NAME, "client_Name"))) elements = self.driver.find_elements_by_class_name( 'client_Name') clients = [] for val in elements: _LOGGER.info('Found ' + str(val.text)) clients.extend([str(val.text)]) success = True except StaleElementReferenceException: attempts += 1 except TimeoutException: _LOGGER.error('Timeout exception') self.driver.save_screenshot('error.png') clients = [] self.driver.service.process.send_signal( signal.SIGTERM) # kill the specific phantomjs child proc self.driver.quit() # quit the node proc self.last_results = clients return clients def is_client_connected(self, client_name): clients = self._update_info() if clients is not None: return client_name in clients else: return False def get_device_name(self, device): """The firmware doesn't save the name of the wireless device.""" return None def scan_devices(self): """Scan for new devices and return a list with found device Namess.""" self._update_info() return self.last_results
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")