auto_login_EIP/utils/utils.py

78 lines
2.5 KiB
Python

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()