mydriver.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from selenium import webdriver
  2. from selenium.webdriver.support.ui import WebDriverWait
  3. from selenium.webdriver.support import expected_conditions as EC
  4. from selenium.common import exceptions
  5. from selenium.webdriver.chrome.options import Options
  6. from pdlearn import user_agent
  7. import os
  8. class Mydriver:
  9. def __init__(self, noimg=True, nohead=True):
  10. self.options = Options()
  11. if os.path.exists("./chrome/chrome.exe"): # win
  12. self.options.binary_location = "./chrome/chrome.exe"
  13. elif os.path.exists("/opt/google/chrome/chrome"): # linux
  14. self.options.binary_location = "/opt/google/chrome/chrome"
  15. if noimg:
  16. self.options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
  17. if nohead:
  18. self.options.add_argument('--headless')
  19. self.options.add_argument('--disable-extensions')
  20. self.options.add_argument('--disable-gpu')
  21. self.options.add_argument('--no-sandbox')
  22. self.options.add_argument('--mute-audio') # 关闭声音
  23. self.options.add_argument('--window-size=400,500')
  24. self.options.add_argument('--window-position=800,0')
  25. self.options.add_argument('--log-level=3')
  26. self.options.add_argument('--user-agent={}'.format(user_agent.getheaders()))
  27. self.webdriver = webdriver
  28. if os.path.exists("./chrome/chromedriver.exe"): # win
  29. self.driver = self.webdriver.Chrome(executable_path="./chrome/chromedriver.exe",
  30. chrome_options=self.options)
  31. elif os.path.exists("./chromedriver"): # linux
  32. self.driver = self.webdriver.Chrome(executable_path="./chromedriver",
  33. chrome_options=self.options)
  34. elif os.path.exists("/usr/lib64/chromium-browser/chromedriver"): # linux 包安装chromedriver
  35. self.driver = self.webdriver.Chrome(executable_path="/usr/lib64/chromium-browser/chromedriver",
  36. chrome_options=self.options)
  37. else:
  38. self.driver = self.webdriver.Chrome(chrome_options=self.options)
  39. def login(self):
  40. print("正在打开二维码登陆界面,请稍后")
  41. self.driver.get("https://pc.xuexi.cn/points/login.html")
  42. try:
  43. remover = WebDriverWait(self.driver, 30, 0.2).until(
  44. lambda driver: driver.find_element_by_class_name("redflagbox"))
  45. except exceptions.TimeoutException:
  46. print("网络缓慢,请重试")
  47. else:
  48. self.driver.execute_script('arguments[0].remove()', remover)
  49. try:
  50. remover = WebDriverWait(self.driver, 30, 0.2).until(
  51. lambda driver: driver.find_element_by_class_name("header"))
  52. except exceptions.TimeoutException:
  53. print("当前网络缓慢...")
  54. else:
  55. self.driver.execute_script('arguments[0].remove()', remover)
  56. try:
  57. remover = WebDriverWait(self.driver, 30, 0.2).until(
  58. lambda driver: driver.find_element_by_class_name("footer"))
  59. except exceptions.TimeoutException:
  60. print("当前网络缓慢...")
  61. else:
  62. self.driver.execute_script('arguments[0].remove()', remover)
  63. self.driver.execute_script('window.scrollTo(document.body.scrollWidth/2 - 200 , 0)')
  64. try:
  65. WebDriverWait(self.driver, 270).until(EC.title_is(u"我的学习"))
  66. cookies = self.get_cookies()
  67. return cookies
  68. except:
  69. print("扫描二维码超时")
  70. def dd_login(self, d_name, pwd):
  71. __login_status = False
  72. self.driver.get(
  73. "https://login.dingtalk.com/login/index.htm?"
  74. "goto=https%3A%2F%2Foapi.dingtalk.com%2Fconnect%2Foauth2%2Fsns_authorize"
  75. "%3Fappid%3Ddingoankubyrfkttorhpou%26response_type%3Dcode%26scope%3Dsnsapi"
  76. "_login%26redirect_uri%3Dhttps%3A%2F%2Fpc-api.xuexi.cn%2Fopen%2Fapi%2Fsns%2Fcallback"
  77. )
  78. self.driver.find_elements_by_id("mobilePlaceholder")[0].click()
  79. self.driver.find_element_by_id("mobile").send_keys(d_name)
  80. self.driver.find_elements_by_id("mobilePlaceholder")[1].click()
  81. self.driver.find_element_by_id("pwd").send_keys(pwd)
  82. self.driver.find_element_by_id("loginBtn").click()
  83. try:
  84. print("登陆中...")
  85. WebDriverWait(self.driver, 2, 0.1).until(lambda driver: driver.find_element_by_class_name("modal"))
  86. print(self.driver.find_element_by_class_name("modal").find_elements_by_tag_name("div")[0].text)
  87. self.driver.quit()
  88. __login_status = False
  89. except:
  90. __login_status = True
  91. return __login_status
  92. def get_cookies(self):
  93. cookies = self.driver.get_cookies()
  94. return cookies
  95. def set_cookies(self, cookies):
  96. for cookie in cookies:
  97. self.driver.add_cookie({k: cookie[k] for k in cookie.keys()})
  98. def get_url(self, url):
  99. self.driver.get(url)
  100. def go_js(self, js):
  101. self.driver.execute_script(js)
  102. def quit(self):
  103. self.driver.quit()