Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from selenium import webdriver
- from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException
- from selenium.webdriver.common.action_chains import ActionChains
- from selenium.webdriver.common.by import By
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.support.ui import Select, WebDriverWait
- TIMEOUT = 20
- def open_browser(browser):
- global driver
- if browser == 'Firefox':
- profile = webdriver.FirefoxProfile('profile')
- driver = webdriver.Firefox(profile)
- if browser == 'Chrome':
- driver = webdriver.Chrome()
- def login(name, passwd):
- driver.get('http://poke-life.net/')
- username = driver.find_element_by_name('login')
- username.send_keys(name)
- password = driver.find_element_by_name('haslo')
- password.send_keys(passwd+Keys.ENTER)
- def load_page():
- WebDriverWait(driver, TIMEOUT).until(lambda d: d.execute_script("return jQuery.active == 0"))
- def is_present(by, value):
- try:
- driver.find_element(by, value)
- return True
- except NoSuchElementException:
- return False
- def wait_visible(element):
- return WebDriverWait(driver, TIMEOUT).until(EC.visibility_of(element))
- def hover_over(element):
- actions = ActionChains(driver)
- actions.move_to_element(element)
- actions.perform()
- def remove(element):
- driver.execute_script("""
- var element = arguments[0];
- element.parentNode.removeChild(element);
- """, element)
- class Pokelife:
- def __init__(self):
- self.pa = 0
- self.mpa = 0
- self.battle = False
- self.trainer = False
- self.capture = False
- self.is_shiny = False
- self.pokemon_name = ''
- self.pokemon_level = None
- self.pokemons_hurt = []
- self.update()
- def update(self):
- # setting values to default
- self.battle = False
- self.trainer = False
- self.capture = False
- self.is_shiny = False
- self.pokemon_name = ''
- self.pokemon_level = None
- self.pokemons_hurt = []
- # updating pa and pokemon status
- load_page()
- self.update_pa()
- self.update_hp()
- def update_pa(self):
- stale = True
- while stale:
- try:
- pa_bar = driver.find_element_by_class_name('progress-stan2')
- pa, mpa = pa_bar.text.split(' ')[0].split('/')
- self.pa, self.mpa = int(pa), int(mpa)
- stale = False
- except StaleElementReferenceException:
- pass
- def update_hp(self):
- for i in range(6):
- stale = True
- while stale:
- try:
- section = driver.find_elements_by_css_selector('table.table-striped.table-condensed')[0]
- pkmn_line = section.find_elements_by_tag_name('tr')[i]
- pkmn = pkmn_line.find_elements_by_class_name('stan-pokemon')[1]
- hp_line = pkmn.find_elements_by_tag_name('span')[0].text
- hp, mhp = hp_line.split(' ')[0].split('/')
- if hp == '0':
- self.pokemons_hurt.append('dead') # also count as True
- elif hp != mhp:
- self.pokemons_hurt.append(True)
- else:
- self.pokemons_hurt.append(False)
- stale = False
- except StaleElementReferenceException:
- pass
- def is_hurt(self, pokemon=None):
- if pokemon is not None:
- return self.pokemons_hurt[pokemon - 1]
- else:
- return any(self.pokemons_hurt)
- def explore(self, dzicz):
- dicz_bar = driver.find_element_by_id('pasek_skrotow')
- dzicze = dicz_bar.find_elements_by_tag_name('a')
- dzicz_button = dzicze[dzicz-1]
- dzicz_button.send_keys(Keys.ENTER)
- load_page()
- self.get_event()
- def get_event(self):
- if driver.find_elements_by_class_name('btn-wybor_pokemona'):
- self.battle = True
- # getting pokemon level and name
- level_line = driver.find_element_by_xpath("//b[contains(text(),'Poziom:')]").text
- self.pokemon_level = int(level_line.split(' ')[1])
- self.pokemon_name = driver.find_element_by_tag_name('big').text
- if len(self.pokemon_name.split(' ')) == 2:
- self.is_shiny = True
- elif driver.find_elements_by_id('pokaz_raport_przycisk'):
- self.trainer = True
- def fight(self, pokemon):
- pokemon_buttons = driver.find_elements_by_class_name('btn-wybor_pokemona')
- pokemon_button = pokemon_buttons[pokemon-1]
- pokemon_button.click() # puts pokemon[0-5] into battle
- load_page()
- if driver.find_elements_by_class_name('btn-pokeball'):
- self.capture = True
- def catch(self, pokeball='Greatball'):
- ball__button_xpath = "//button[@data-original-title='{0}']".format(pokeball)
- ball_button = driver.find_element_by_xpath(ball__button_xpath)
- ball_button.click()
- def menu_get(self, x, y):
- # getting visible buttons
- buttons = driver.find_elements_by_xpath("//li[@class='dropdown']")
- button = buttons[x]
- # getting dropdown button
- hidden_buttons = button.find_elements_by_tag_name('li')
- hidden_button = hidden_buttons[y].find_element_by_tag_name('a')
- # performing actions
- hover_over(button)
- wait_visible(hidden_button).click()
- load_page()
- def backpack(self, item_name, pokemon=None, qty=None):
- img_xpath = "//img[@src='images/pokesklep/{0}.jpg' and contains(@class, 'box-center')]".format(item_name)
- # check if element is present, if not open backpack
- if not is_present(By.XPATH, img_xpath):
- self.menu_get(0, 2) # opens backpack from menu
- # getting tab name
- item_img = driver.find_element_by_xpath(img_xpath)
- div = item_img.find_element_by_xpath(img_xpath+"/ancestor::div[@role='tabpanel']")
- tab_id = div.get_attribute('id')
- # opening backpack tab
- tab_xpath = "//a[@aria-controls='{0}']".format(tab_id)
- backpack_tab = driver.find_element_by_xpath(tab_xpath)
- backpack_tab.click()
- # waiting for tab to load and visibility of item
- item_button = wait_visible(item_img)
- item_button.click()
- # locating form to use item
- form_xpath = "//input[@value='{0}' and @name='rodzaj_przedmiotu']/parent::*".format(item_name)
- form = wait_visible(driver.find_element_by_xpath(form_xpath))
- # locating button to send form.
- # non default quantity of item to use
- if qty:
- qty_input = wait_visible(form.find_element_by_xpath("input[@name='ilosc']"))
- qty_input.send_keys(str(qty))
- # if pokemon is specified chosing him from select menu
- if pokemon:
- select = Select(form.find_element_by_tag_name('select'))
- select.select_by_index(pokemon-1)
- button = form.find_element_by_tag_name('button')
- button.click()
- load_page()
- def heal(self, pokemon=None):
- if pokemon is None:
- self.heal_all()
- else:
- self.heal_one(pokemon-1)
- def heal_one(self, pokemon):
- section = driver.find_elements_by_css_selector('table.table-striped.table-condensed')[0]
- pkmn_line = section.find_elements_by_tag_name('tr')[pokemon]
- button_menu = pkmn_line.find_element_by_tag_name('button')
- button_menu.send_keys(Keys.ENTER)
- load_page()
- # waiting for heal button to become visible, then click
- button_heal_xpath = "//a[@class='wylecz_pokemona_cp' and @data-id={0}]".format(pokemon)
- button_heal = wait_visible(driver.find_element_by_xpath(button_heal_xpath))
- button_heal.send_keys(Keys.ENTER)
- load_page()
- # press Escape to hide pop-up window
- close_button = wait_visible(driver.find_element_by_xpath("//div[@id='miniOkno']"))
- close_button.send_keys(Keys.ESCAPE)
- load_page()
- def heal_all(self):
- xpath = "//a[@data-original-title='Wylecz wszystkie pokemony']"
- heal_button = driver.find_element_by_xpath(xpath)
- heal_button.click()
- load_page()
- def drink(self):
- xpath = "//a[@data-original-title='Wypij Niebieski Napój Energetyczny']"
- drink_button = driver.find_element_by_xpath(xpath)
- drink_button.click()
- wait_visible(driver.find_element_by_xpath("//div[@id='miniOkno']")).send_keys(Keys.ESCAPE)
- load_page()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement