Guest User

Untitled

a guest
May 11th, 2017
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.78 KB | None | 0 0
  1. from selenium import webdriver
  2. from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException
  3. from selenium.webdriver.common.action_chains import ActionChains
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.common.keys import Keys
  6. from selenium.webdriver.support import expected_conditions as EC
  7. from selenium.webdriver.support.ui import Select, WebDriverWait
  8.  
  9.  
  10. TIMEOUT = 20
  11.  
  12.  
  13. def open_browser(browser):
  14. global driver
  15. if browser == 'Firefox':
  16. profile = webdriver.FirefoxProfile('profile')
  17. driver = webdriver.Firefox(profile)
  18. if browser == 'Chrome':
  19. driver = webdriver.Chrome()
  20.  
  21.  
  22. def login(name, passwd):
  23. driver.get('http://poke-life.net/')
  24. username = driver.find_element_by_name('login')
  25. username.send_keys(name)
  26. password = driver.find_element_by_name('haslo')
  27. password.send_keys(passwd+Keys.ENTER)
  28.  
  29.  
  30. def load_page():
  31. WebDriverWait(driver, TIMEOUT).until(lambda d: d.execute_script("return jQuery.active == 0"))
  32.  
  33.  
  34. def is_present(by, value):
  35. try:
  36. driver.find_element(by, value)
  37. return True
  38. except NoSuchElementException:
  39. return False
  40.  
  41.  
  42. def wait_visible(element):
  43. return WebDriverWait(driver, TIMEOUT).until(EC.visibility_of(element))
  44.  
  45.  
  46. def hover_over(element):
  47. actions = ActionChains(driver)
  48. actions.move_to_element(element)
  49. actions.perform()
  50.  
  51.  
  52. def remove(element):
  53. driver.execute_script("""
  54. var element = arguments[0];
  55. element.parentNode.removeChild(element);
  56. """, element)
  57.  
  58.  
  59. class Pokelife:
  60. def __init__(self):
  61. self.pa = 0
  62. self.mpa = 0
  63. self.battle = False
  64. self.trainer = False
  65. self.capture = False
  66. self.is_shiny = False
  67. self.pokemon_name = ''
  68. self.pokemon_level = None
  69. self.pokemons_hurt = []
  70. self.update()
  71.  
  72. def update(self):
  73. # setting values to default
  74. self.battle = False
  75. self.trainer = False
  76. self.capture = False
  77. self.is_shiny = False
  78. self.pokemon_name = ''
  79. self.pokemon_level = None
  80. self.pokemons_hurt = []
  81. # updating pa and pokemon status
  82. load_page()
  83. self.update_pa()
  84. self.update_hp()
  85.  
  86. def update_pa(self):
  87. stale = True
  88. while stale:
  89. try:
  90. pa_bar = driver.find_element_by_class_name('progress-stan2')
  91. pa, mpa = pa_bar.text.split(' ')[0].split('/')
  92. self.pa, self.mpa = int(pa), int(mpa)
  93. stale = False
  94. except StaleElementReferenceException:
  95. pass
  96.  
  97. def update_hp(self):
  98. for i in range(6):
  99. stale = True
  100. while stale:
  101. try:
  102. section = driver.find_elements_by_css_selector('table.table-striped.table-condensed')[0]
  103. pkmn_line = section.find_elements_by_tag_name('tr')[i]
  104. pkmn = pkmn_line.find_elements_by_class_name('stan-pokemon')[1]
  105. hp_line = pkmn.find_elements_by_tag_name('span')[0].text
  106. hp, mhp = hp_line.split(' ')[0].split('/')
  107. if hp == '0':
  108. self.pokemons_hurt.append('dead') # also count as True
  109. elif hp != mhp:
  110. self.pokemons_hurt.append(True)
  111. else:
  112. self.pokemons_hurt.append(False)
  113. stale = False
  114. except StaleElementReferenceException:
  115. pass
  116.  
  117. def is_hurt(self, pokemon=None):
  118. if pokemon is not None:
  119. return self.pokemons_hurt[pokemon - 1]
  120. else:
  121. return any(self.pokemons_hurt)
  122.  
  123. def explore(self, dzicz):
  124. dicz_bar = driver.find_element_by_id('pasek_skrotow')
  125. dzicze = dicz_bar.find_elements_by_tag_name('a')
  126. dzicz_button = dzicze[dzicz-1]
  127. dzicz_button.send_keys(Keys.ENTER)
  128. load_page()
  129. self.get_event()
  130.  
  131. def get_event(self):
  132. if driver.find_elements_by_class_name('btn-wybor_pokemona'):
  133. self.battle = True
  134. # getting pokemon level and name
  135. level_line = driver.find_element_by_xpath("//b[contains(text(),'Poziom:')]").text
  136. self.pokemon_level = int(level_line.split(' ')[1])
  137. self.pokemon_name = driver.find_element_by_tag_name('big').text
  138. if len(self.pokemon_name.split(' ')) == 2:
  139. self.is_shiny = True
  140. elif driver.find_elements_by_id('pokaz_raport_przycisk'):
  141. self.trainer = True
  142.  
  143. def fight(self, pokemon):
  144. pokemon_buttons = driver.find_elements_by_class_name('btn-wybor_pokemona')
  145. pokemon_button = pokemon_buttons[pokemon-1]
  146. pokemon_button.click() # puts pokemon[0-5] into battle
  147. load_page()
  148.  
  149. if driver.find_elements_by_class_name('btn-pokeball'):
  150. self.capture = True
  151.  
  152. def catch(self, pokeball='Greatball'):
  153. ball__button_xpath = "//button[@data-original-title='{0}']".format(pokeball)
  154. ball_button = driver.find_element_by_xpath(ball__button_xpath)
  155. ball_button.click()
  156.  
  157. def menu_get(self, x, y):
  158. # getting visible buttons
  159. buttons = driver.find_elements_by_xpath("//li[@class='dropdown']")
  160. button = buttons[x]
  161. # getting dropdown button
  162. hidden_buttons = button.find_elements_by_tag_name('li')
  163. hidden_button = hidden_buttons[y].find_element_by_tag_name('a')
  164. # performing actions
  165. hover_over(button)
  166. wait_visible(hidden_button).click()
  167. load_page()
  168.  
  169. def backpack(self, item_name, pokemon=None, qty=None):
  170. img_xpath = "//img[@src='images/pokesklep/{0}.jpg' and contains(@class, 'box-center')]".format(item_name)
  171. # check if element is present, if not open backpack
  172. if not is_present(By.XPATH, img_xpath):
  173. self.menu_get(0, 2) # opens backpack from menu
  174. # getting tab name
  175. item_img = driver.find_element_by_xpath(img_xpath)
  176. div = item_img.find_element_by_xpath(img_xpath+"/ancestor::div[@role='tabpanel']")
  177. tab_id = div.get_attribute('id')
  178. # opening backpack tab
  179. tab_xpath = "//a[@aria-controls='{0}']".format(tab_id)
  180. backpack_tab = driver.find_element_by_xpath(tab_xpath)
  181. backpack_tab.click()
  182. # waiting for tab to load and visibility of item
  183. item_button = wait_visible(item_img)
  184. item_button.click()
  185. # locating form to use item
  186. form_xpath = "//input[@value='{0}' and @name='rodzaj_przedmiotu']/parent::*".format(item_name)
  187. form = wait_visible(driver.find_element_by_xpath(form_xpath))
  188. # locating button to send form.
  189. # non default quantity of item to use
  190. if qty:
  191. qty_input = wait_visible(form.find_element_by_xpath("input[@name='ilosc']"))
  192. qty_input.send_keys(str(qty))
  193. # if pokemon is specified chosing him from select menu
  194. if pokemon:
  195. select = Select(form.find_element_by_tag_name('select'))
  196. select.select_by_index(pokemon-1)
  197. button = form.find_element_by_tag_name('button')
  198. button.click()
  199. load_page()
  200.  
  201. def heal(self, pokemon=None):
  202. if pokemon is None:
  203. self.heal_all()
  204. else:
  205. self.heal_one(pokemon-1)
  206.  
  207. def heal_one(self, pokemon):
  208. section = driver.find_elements_by_css_selector('table.table-striped.table-condensed')[0]
  209. pkmn_line = section.find_elements_by_tag_name('tr')[pokemon]
  210. button_menu = pkmn_line.find_element_by_tag_name('button')
  211. button_menu.send_keys(Keys.ENTER)
  212. load_page()
  213. # waiting for heal button to become visible, then click
  214. button_heal_xpath = "//a[@class='wylecz_pokemona_cp' and @data-id={0}]".format(pokemon)
  215. button_heal = wait_visible(driver.find_element_by_xpath(button_heal_xpath))
  216. button_heal.send_keys(Keys.ENTER)
  217. load_page()
  218. # press Escape to hide pop-up window
  219. close_button = wait_visible(driver.find_element_by_xpath("//div[@id='miniOkno']"))
  220. close_button.send_keys(Keys.ESCAPE)
  221. load_page()
  222.  
  223. def heal_all(self):
  224. xpath = "//a[@data-original-title='Wylecz wszystkie pokemony']"
  225. heal_button = driver.find_element_by_xpath(xpath)
  226. heal_button.click()
  227. load_page()
  228.  
  229. def drink(self):
  230. xpath = "//a[@data-original-title='Wypij Niebieski Napój Energetyczny']"
  231. drink_button = driver.find_element_by_xpath(xpath)
  232. drink_button.click()
  233. wait_visible(driver.find_element_by_xpath("//div[@id='miniOkno']")).send_keys(Keys.ESCAPE)
  234. load_page()
Add Comment
Please, Sign In to add comment