AutoPercenty/edit/action_elements.py

66 lines
3.0 KiB
Python

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}")