셀레늄(Selenium)은 자동화 테스트를 위해 가장 많이 사용되는 도구 중 하나입니다. 웹 애플리케이션 테스트, 웹 스크래핑 등에 널리 사용되는 셀레늄은 강력하면서도 유연한 도구입니다. 그러나 올바른 사용법을 알지 못하면 효율성과 안정성에 문제가 생길 수 있습니다. 이번 포스트에서는 셀레늄을 사용할 때 권장되는 몇 가지 베스트 프랙티스에 대해 알아보겠습니다.
1. 명시적인 대기
셀레늄은 자바스크립트가 로드되고 시간이 지나는 것을 기다리지 않고 웹 요소에 액세스하려고 시도합니다. 그러므로 웹 페이지 로딩이 완료되기 전에 요소를 찾으려고 할 때 오류가 발생할 수 있습니다. 이를 해결하기 위해 명시적인 대기를 사용해야 합니다.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
# 10초 동안 해당 요소가 나타날 때까지 기다림
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myElement"))
)
위 코드는 최대 10초 동안 “myElement”라는 ID를 가진 요소가 표시될 때까지 기다립니다. 이렇게 함으로써 안정적으로 웹 요소에 액세스할 수 있습니다.
2. 웹 드라이버 초기화 및 종료
셀레늄을 사용하기 전에 웹 드라이버를 초기화해야 합니다. 또한 작업을 마치면 웹 드라이버를 명시적으로 종료해야 합니다. 이렇게 하면 리소스 누수를 방지할 수 있습니다.
from selenium import webdriver
# 웹 드라이버 초기화
driver = webdriver.Chrome()
# 작업 수행
# 웹 드라이버 종료
driver.quit()
3. 웹 드라이버 버전과 브라우저 버전 일치
셀레늄은 웹 드라이버를 사용하여 웹 브라우저를 조작합니다. 따라서 셀레늄의 버전과 웹 드라이버의 버전이 호환되어야 합니다. 브라우저를 업데이트했을 때는 웹 드라이버도 업데이트해야 합니다. 호환되지 않는 버전을 사용할 경우 예기치 않은 동작이 발생할 수 있습니다.
4. 명시적인 요소 액세스 방법 사용
셀레늄은 다양한 요소 액세스 방법을 제공합니다. 가장 일반적인 방법은 아이디(ID), 클래스 이름, XPath, CSS 선택자를 사용하는 것입니다. 이 중에서도 가장 빠르고 안정적인 방법은 아이디를 사용하는 것입니다.
# ID를 사용한 요소 액세스
element = driver.find_element_by_id("myElement")
# 클래스 이름을 사용한 요소 액세스
element = driver.find_element_by_class_name("myClass")
# XPath를 사용한 요소 액세스
element = driver.find_element_by_xpath("//div[@id='myElement']")
# CSS 선택자를 사용한 요소 액세스
element = driver.find_element_by_css_selector("#myElement")
5. 액션 체인 사용
셀레늄을 사용하면 마우스 클릭, 키보드 입력 등 다양한 액션을 시뮬레이션할 수 있습니다. 여러 개의 액션을 순차적으로 실행해야 할 때는 액션 체인(Action Chains)을 사용하는 것이 좋습니다.
from selenium.webdriver.common.action_chains import ActionChains
# 액션 체인 사용 예시
actions = ActionChains(driver)
actions.move_to_element(element1)
actions.click()
actions.move_to_element(element2)
actions.click()
actions.perform()
위 예시는 element1
위로 이동한 후 클릭하고, element2
위로 이동한 후 클릭하는 액션 체인을 보여줍니다. 액션 체인을 사용하면 복잡한 동작을 직관적으로 구현할 수 있습니다.
셀레늄을 사용하는데 있어 이러한 베스트 프랙티스를 따르면 코드의 안정성과 가독성을 향상시킬 수 있습니다. 이를 통해 웹 테스트나 웹 스크래핑 프로젝트의 성공 확률을 높일 수 있습니다.