import getpass import time from pathlib import WindowsPath import tomli from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select class LoginInfo(): def __init__(self, config_path: WindowsPath): with open(config_path, mode="rb") as f: config = tomli.load(f) self.lang = config["login_info"]["lang"] self.login_ID = config["login_info"]["login_ID"] self.login_passwd = config["login_info"]["login_passwd"] self.company_ID = config["login_info"]["company_ID"] if self.login_ID == "": self.login_ID = getpass.getpass( "please enter your ID: ").strip() if self.login_passwd == "": self.login_passwd = getpass.getpass( "please enter your passwd: ") def keep_login_status(driver: webdriver.Chrome, login_info: LoginInfo): EIP_url = "https://eip.techmation.com.tw/MotorWeb/MotorFaceDefaultNew.aspx" # * Close all windows except the main window. while len(driver.window_handles) > 1: driver.switch_to.window(driver.window_handles[1]) time.sleep(0.05) driver.close() driver.switch_to.window(driver.window_handles[0]) top_page = driver.current_window_handle driver.get(EIP_url) time.sleep(0.3) if driver.title == "CHI MOTOR WEB ERP 登入": # * Fill in all login information. dropdown_element = driver.find_element(By.ID, "ddlLang") select = Select(dropdown_element) select.select_by_value(login_info.lang) input_text_element = driver.find_element(By.ID, "txtLoginID") input_text_element.clear() input_text_element.send_keys(login_info.login_ID) input_text_element = driver.find_element(By.ID, "txtLoginPwd") input_text_element.clear() input_text_element.send_keys(login_info.login_passwd) dropdown_element = driver.find_element(By.ID, "ddlCompanyID") select = Select(dropdown_element) select.select_by_value(login_info.company_ID) # * Press the submit button. submit_btn = driver.find_element(By.ID, "btnLogin") submit_btn.click() time.sleep(3) # * If login has pop a new window, switch main window to the new one. for handle in driver.window_handles: if handle != top_page: new_page = handle driver.switch_to.window(top_page) driver.close() driver.switch_to.window(new_page) driver.maximize_window()