buctAuthentication/Authtication.py
2025-06-04 15:24:13 +08:00

101 lines
3.8 KiB
Python

import os
import requests
import selenium.common.exceptions
import urllib3
import logging
from dotenv import load_dotenv
from selenium import webdriver
from selenium.webdriver.common.by import By
logging.basicConfig(
level=logging.INFO,
format="%(levelno)s - %(levelname)s - %(asctime)s - %(name)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
filename="log.log",
filemode="a"
)
class BUCTAU:
def __init__(self):
load_dotenv()
self.USER_USERNAME = os.environ.get('BUCT_AUTHENTICATION_USERNAME')
self.USER_PASSWORD = os.environ.get('BUCT_AUTHENTICATION_PASSWORD')
self.USER_NAME = os.getlogin()
logging.info(f"USER now is {self.USER_NAME}")
logging.info(f"BUCTAU initialized with username:{self.USER_USERNAME}")
logging.info(f"BUCTAU initialized with password:{self.USER_PASSWORD}")
# print(f"USER now is {self.USER_NAME}")
# print("BUCTAU initialized with username:", self.USER_USERNAME)
# print("BUCTAU initialized with password:", self.USER_PASSWORD)
@staticmethod
def init_driver_edge():
"""Initialize the Selenium WebDriver with Edge options.
Returns:
WebDriver: The initialized Selenium WebDriver instance.
"""
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
service = Service()
options = Options()
options.add_argument("--headless") # Run in headless mode
options.add_argument("--no-sandbox")
# options.add_experimental_option("detach", True)
driver = webdriver.Edge(service=service, options=options)
driver.implicitly_wait(5) # Implicit wait for elements to load
return driver
@staticmethod
def init_driver_chrome():
"""Initialize the Selenium WebDriver with Chrome options.
Returns:
WebDriver: The initialized Selenium WebDriver instance.
"""
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
service = Service(executable_path="/usr/bin/chromedriver")
options = Options()
options.add_argument("--headless") # Run in headless mode
options.add_argument("--no-sandbox")
# options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=service, options=options)
driver.implicitly_wait(5) # Implicit wait for elements to load
return driver
def login(self, driver):
"""open the page and login"""
logging.info("LOGIN")
driver.get("https://tree.buct.edu.cn/index_20.html")
driver.maximize_window()
try:
driver.find_element(By.XPATH, '/html/body/main/section/div[1]/div[2]/input').send_keys(self.USER_USERNAME)
driver.find_element(By.XPATH, '//*[@id="password"]').send_keys(self.USER_PASSWORD)
driver.find_element(By.XPATH, '/html/body/main/section/div[1]/div[8]/button[1]').click()
return True
except selenium.common.exceptions.NoSuchElementException as e:
logging.info("NoSuchElementException: ", e)
return False
@staticmethod
def detect_net():
# noinspection PyBroadException
try:
detector = requests.get(url="https://www.baidu.com", timeout=5)
if detector.status_code == 200:
logging.info("Network is available")
return True
else:
logging.info("Network is not available")
return False
except urllib3.exceptions.MaxRetryError:
logging.info("MaxRetryError: False")
return False
except requests.ConnectionError:
logging.info("ConnectionError: False")
return False
except Exception:
return False