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 mongo_config = MongoConfig() # MongoDB 설정 관리 인스턴스 생성 mongo_config.try_connect(*mongo_config.load_config()) # MongoDB에 연결 시도 logger = setup_logger('default_logger', 'application.log', level=logging.DEBUG) def DB_setting(): QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts) app = QtWidgets.QApplication(sys.argv) 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 def main(): login_info, app_result = 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, set_num_modify) #웹 드라이버 종료 driver.quit() if __name__ == "__main__": main()