forked from kinoshitakenta/auto_login_EIP
95 lines
3.1 KiB
Python
95 lines
3.1 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.
|
|
login_page_handle = ""
|
|
main_page_handle = ""
|
|
|
|
for handle in driver.window_handles:
|
|
driver.switch_to.window(handle)
|
|
if "CHI MotorWeb - " in driver.title:
|
|
main_page_handle = handle
|
|
elif "CHI MOTOR WEB ERP 登入" in driver.title:
|
|
login_page_handle = handle
|
|
|
|
# * get the page handle that should be stay
|
|
if main_page_handle:
|
|
stay_page_handle = main_page_handle
|
|
elif login_page_handle:
|
|
stay_page_handle = login_page_handle
|
|
else:
|
|
stay_page_handle = top_page
|
|
|
|
# * close unnecessary pages
|
|
for handle in driver.window_handles:
|
|
if handle != stay_page_handle:
|
|
driver.switch_to.window(handle)
|
|
driver.close()
|
|
|
|
driver.switch_to.window(stay_page_handle)
|
|
driver.maximize_window()
|