chrome.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.service import Service
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC
  6. import logging
  7. from conf import path
  8. from . import url, loc
  9. class Robot:
  10. def __init__(self):
  11. service = Service(path.chromedriver, log_path=path.chromedriver_log)
  12. self.driver = webdriver.Chrome(service=service)
  13. self.driver.implicitly_wait(10)
  14. self.wait = WebDriverWait(self.driver, 10)
  15. def wait_to_click(self, loc):
  16. return self.wait.until(EC.element_to_be_clickable(loc))
  17. def login(self, username, password):
  18. logging.info('login...')
  19. self.driver.get(url.logout)
  20. self.driver.get(url.login)
  21. self.driver.switch_to.frame('loginIframe')
  22. self.wait_to_click(loc.username).send_keys(username)
  23. self.wait_to_click(loc.password).send_keys(password + Keys.RETURN)
  24. self.wait.until(EC.url_to_be(url.uc_index))
  25. logging.info('login successful')
  26. def punch(self, username, password, at_school, risky, geolocation):
  27. self.login(username, password)
  28. self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
  29. self.driver.get(url.ncov)
  30. school_loc = loc.is_at_school if at_school else loc.not_at_school
  31. risk_loc = loc.risky if risky else loc.no_risk
  32. self.wait_to_click(school_loc).click()
  33. self.wait_to_click(risk_loc).click()
  34. self.wait_to_click(loc.geolocation).click()
  35. self.wait.until(EC.invisibility_of_element_located((loc.loading)))
  36. btn = self.wait_to_click(loc.submit_button)
  37. btn.click()
  38. if not btn.get_attribute('class'):
  39. self.wait_to_click(loc.submit_confirm_button).click()
  40. self.wait.until(EC.invisibility_of_element_located(loc.loading))
  41. result = self.wait.until(EC.visibility_of_element_located(loc.result)).text
  42. return result
  43. def quit(self):
  44. self.driver.quit()
  45. def test_geolocation(self, geolocation):
  46. self.driver.get(url.geolocation)
  47. self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
  48. self.driver.switch_to.frame('iframeResult')
  49. self.wait_to_click((loc.By.TAG_NAME, 'button')).click()
  50. from time import sleep
  51. sleep(5)
  52. result = self.driver.find_element(loc.By.ID, 'demo').text
  53. return result