from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import logging # 로거 인스턴스 가져오기 logger = logging.getLogger('default_logger') def click_element(driver, element_type, element_identifier, wait_time=10, click_type='normal'): """ 주어진 요소를 찾아 클릭합니다. Parameters: - driver: WebDriver 인스턴스 - element_type: 요소를 찾는 방법 ('CSS_SELECTOR', 'CLASS_NAME', 'XPATH', 'ID') - element_identifier: 요소의 식별자 - wait_time: 요소가 나타날 때까지 대기하는 시간 (초) - click_type: 클릭 방식 ('normal' 또는 'js') - visibility_of_element_located : 사용자가 실제로 볼 수 있고, 상호작용할 수 있는 요소에 대한 작업을 진행하기 전에 요소의 가시성을 보장 - presence_of_element_located : 페이지 로딩이 완료되었는지 확인하거나, 특정 요소가 DOM에 추가되었는지를 확인할 때 """ try: element = WebDriverWait(driver, wait_time).until( EC.visibility_of_element_located((getattr(By, element_type), element_identifier)) # EC.presence_of_element_located((getattr(By, element_type), element_identifier)) ) if click_type == 'js': driver.execute_script("arguments[0].click();", element) else: element.click() logger.debug(f"'{element_identifier}' 요소를 성공적으로 클릭함.") except TimeoutException: logger.debug(f"'{element_identifier}' 요소를 {wait_time} 초 이내에 찾지 못함.") except Exception as e: logger.debug(f"예상치 못한 오류 발생: {e}") def return_element(driver, element_type, element_identifier, wait_time=10): """ 주어진 요소를 찾아 클릭합니다. Parameters: - driver: WebDriver 인스턴스 - element_type: 요소를 찾는 방법 ('CSS_SELECTOR', 'CLASS_NAME', 'XPATH', 'ID') - element_identifier: 요소의 식별자 - wait_time: 요소가 나타날 때까지 대기하는 시간 (초) - visibility_of_element_located : 사용자가 실제로 볼 수 있고, 상호작용할 수 있는 요소에 대한 작업을 진행하기 전에 요소의 가시성을 보장 - presence_of_element_located : 페이지 로딩이 완료되었는지 확인하거나, 특정 요소가 DOM에 추가되었는지를 확인할 때 """ try: element = WebDriverWait(driver, wait_time).until( EC.visibility_of_element_located((getattr(By, element_type), element_identifier)) ) logger.debug(f"'{element}' 요소를 성공적으로 찾음.") return element except TimeoutException: logger.debug(f"'{element_identifier}' 요소를 {wait_time} 초 이내에 찾지 못함.") except Exception as e: logger.debug(f"예상치 못한 오류 발생: {e}")