auto_login_EIP/main.py

127 lines
3.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'kinoshitakenta'
__email__ = "ybs0306748@gmail.com"
import ctypes
import logging
import os
from pathlib import Path
from selenium.common.exceptions import InvalidSessionIdException
from utils.cli import cli
from utils.driver import get_driver
from utils.EIP_action import ActionType, Action
from utils.utils import keep_login_status, LoginInfo
def get_usage() -> list[tuple]:
cmd_list = []
for e in ActionType:
cmd_list.append((f"{e.value}", f"{e.name}"))
cmd_list.append(("99", "重新輸入登入資訊"))
cmd_list.append(("exit", "關閉"))
return cmd_list
def clear_screen():
if os.name == 'nt':
# Windows system
try:
# try to reset the text attributes
kernel32 = ctypes.windll.kernel32
handle = kernel32.GetStdHandle(-11) # STD_OUTPUT_HANDLE
kernel32.SetConsoleTextAttribute(handle, 7)
except Exception:
pass
os.system('cls')
else:
# Unix-like system
clear_cmd = shutil.which('clear')
if clear_cmd:
os.system(clear_cmd)
else:
# backup plan: Use ANSI escape codes (to clear and reset the screen).
print('\033c', end='')
def display_usage():
clear_screen()
for cmd, msg in get_usage():
print(f"{cmd}: {msg}")
print()
def main(opt):
config_path = Path(opt.config_path)
if not config_path.exists() or not config_path.is_file():
print(f"Error: Config path '{config_path}' does not exist or is not a file.")
return
login_info = LoginInfo(config_path)
driver = get_driver()
action_agent = Action(driver)
display_usage()
keep_login_status(driver, login_info)
try:
while True:
cmd = input("\nInput action code: ").strip()
print(f"Retrieve cmd: {cmd}")
# * command parse
if cmd == "exit":
print("Program is closing...")
break
elif cmd == "99":
login_info = LoginInfo(Path(opt.config_path))
keep_login_status(driver, login_info)
continue
if not cmd.isdigit():
print("Input format error, please try again.")
continue
else:
action_code = int(cmd)
if not ActionType.has_value(action_code):
print("Please enter an existing action code.")
continue
# * run command
if keep_login_status(driver, login_info):
action_agent.run(action_code)
except InvalidSessionIdException:
print("Session has expired, please re-login.")
except KeyboardInterrupt:
pass
driver.quit()
if __name__ == "__main__":
from rich.console import Console
from rich.traceback import install
install(show_locals=True)
console = Console(tab_size=4, log_path=False)
logging.basicConfig(
filename='log.log',
filemode='a+',
level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s : %(message)s'
)
opt = cli()
main(opt)