AutoPercenty/main.py

115 lines
4.8 KiB
Python

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service #웨일
# from webdriver_manager.chrome import ChromeDriverManager #웨일
import time
from login import login
import sys
from navigate import navigate_to_new_product_registration
from modify_products import modify_products
from database import setup_database
from utils import log
from config import WEBSITE_URL
from credentials import load_credentials, save_credentials
from ai.gemini import ImageDescriptionGenerator
from login_widget import LoginWidget
from mongo_config import MongoConfig
from PyQt5 import QtCore, QtWidgets
from logger_module import setup_logger
import logging
def DB_setting():
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
app = QtWidgets.QApplication(sys.argv)
# MongoDB 설정 및 연결 시도
mongo_config = MongoConfig()
if not mongo_config.try_connect(*mongo_config.load_config()):
logger.debug("MongoDB에 연결할 수 없습니다. 설정을 확인해주세요.")
sys.exit(-1) # MongoDB 연결 실패 시, 애플리케이션 종료
login_widget = LoginWidget(mongo_config) # MongoDB 설정을 인자로 전달하려면 여기에 추가하세요.
login_widget.show()
result = app.exec_() # 이벤트 루프를 실행하고 종료 코드를 반환
# login_widget에서 필요한 값을 딕셔너리로 패킹하여 반환
login_info = {
"per_email": login_widget.per_email,
"per_password": login_widget.per_password,
"per_em_email": login_widget.per_em_email,
"per_em_password": login_widget.per_em_password,
"per_mode": login_widget.per_mode,
"set_num_modify": login_widget.set_num_modify,
"login_result": login_widget.result # 로그인 결과도 함께 반환
}
return login_info, result, mongo_config
def main():
login_info, app_result, mongo_config = DB_setting() # 로그인 정보와 QApplication 실행 결과를 받음
if not login_info["login_result"]:
logger.debug("사용자 인증 실패로 프로그램을 종료합니다.")
sys.exit(app_result) # QApplication의 종료 코드와 함께 프로그램 종료
# 로그인 정보 사용
per_email = login_info["per_email"]
logger.debug(f'per_email : {per_email}')
per_password = login_info["per_password"]
# logger.debug(f'per_password : {per_password}')
per_em_email = login_info["per_em_email"]
logger.debug(f'per_em_email : {per_em_email}')
per_em_password = login_info["per_em_password"]
# logger.debug(f'per_em_password : {per_em_password}')
per_mode = login_info["per_mode"]
logger.debug(f'per_mode : {per_mode}')
set_num_modify = login_info["set_num_modify"]
logger.debug(f'set_num_modify : {set_num_modify}')
# 사용자로부터 로그인 정보를 받거나 저장된 정보 사용
gemini = ImageDescriptionGenerator('AIzaSyCER9mD617P5OGaoHCK7drsTkmXUIzFn4U')
# # username, password, employeeID = load_credentials()
# if not username or not password or not employeeID:
# username = input("Username: ")
# password = input("Password: ")
# employeeID = input("employeeID: ")
# save_credentials(username, password, employeeID)
# 크롬 옵션 설정
chrome_options = Options()
#chrome_options.binary_location = "C:\\Program Files\\Naver\\Naver Whale\\Application\\whale.exe" # 네이버 웨일 브라우저의 설치 경로
chrome_options.add_argument("--disable-notifications") # 팝업 알림 비활성화
chrome_options.add_argument("--disable-popup-blocking") # 팝업 차단 비활성화
chrome_options.add_experimental_option("prefs", {
"credentials_enable_service": False, # 자격 증명 서비스 비활성화
"profile.password_manager_enabled": False # 암호 저장 기능 비활성화
})
# 크롬 드라이버에 옵션 추가
driver = webdriver.Chrome(options=chrome_options)
# 웨일 WebDriver 서비스
#service = Service(ChromeDriverManager().install())
# 웨일 WebDriver를 사용하여 네이버 웨일 브라우저 실행
#driver = webdriver.Chrome(service=service, options=chrome_options)
# # 데이터베이스 설정
# setup_database()
# 로그인
driver.get(WEBSITE_URL)
driver.set_window_size(1280, 800)
login(driver, login_info) # login 함수에 로그인 정보를 전달하여 호출
#상품 수정 작업 수행
modify_products(driver, gemini, mongo_config, login_info, set_num_modify)
#웹 드라이버 종료
driver.quit()
if __name__ == "__main__":
logger = setup_logger('default_logger', 'application.log', level=logging.DEBUG)
main()