chrome.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 text, 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. if '成功' in result:
  43. result = text.ok
  44. if '已提交过' in result:
  45. result = text.already
  46. return result
  47. def quit(self):
  48. self.driver.quit()
  49. def test_geolocation(self, geolocation):
  50. self.driver.get(url.geolocation)
  51. self.driver.execute_cdp_cmd('Emulation.setGeolocationOverride', geolocation)
  52. self.driver.switch_to.frame('iframeResult')
  53. self.wait_to_click((loc.By.TAG_NAME, 'button')).click()
  54. from time import sleep
  55. sleep(5)
  56. result = self.driver.find_element(loc.By.ID, 'demo').text
  57. return result