chrome.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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.password_login_tab).click()
  23. self.wait_to_click(loc.username).send_keys(username)
  24. self.wait_to_click(loc.password).send_keys(password + Keys.RETURN)
  25. self.wait.until(EC.url_to_be(url.uc_index))
  26. logging.info('login successful')
  27. def punch(self, username, password, at_school, risky, geolocation):
  28. self.login(username, password)
  29. self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
  30. self.driver.get(url.ncov)
  31. school_loc = loc.is_at_school if at_school else loc.not_at_school
  32. risk_loc = loc.risky if risky else loc.no_risk
  33. self.wait_to_click(school_loc).click()
  34. self.wait_to_click(risk_loc).click()
  35. self.wait_to_click(loc.geolocation).click()
  36. self.wait.until(EC.invisibility_of_element_located((loc.loading)))
  37. btn = self.wait_to_click(loc.submit_button)
  38. btn.click()
  39. if not btn.get_attribute('class'):
  40. self.wait_to_click(loc.submit_confirm_button).click()
  41. self.wait.until(EC.invisibility_of_element_located(loc.loading))
  42. result = self.wait.until(EC.visibility_of_element_located(loc.result)).text
  43. return result
  44. def quit(self):
  45. self.driver.quit()
  46. def test_geolocation(self, geolocation):
  47. self.driver.get(url.geolocation)
  48. self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
  49. self.driver.switch_to.frame('iframeResult')
  50. self.wait_to_click((loc.By.TAG_NAME, 'button')).click()
  51. from time import sleep
  52. sleep(5)
  53. result = self.driver.find_element(loc.By.ID, 'demo').text
  54. return result