본문 바로가기

카테고리 없음

Selenium 요소 찾기: XPath와 Selector 차이 및 활용법 총정리

반응형

Selenium 요소 찾기: XPath와 Selector 차이 및 활용법 총정리

 

웹 자동화와 크롤링을 위해 널리 사용되는 Python Selenium에서 가장 핵심적인 기능 중 하나는 바로 ‘요소(Element) 찾기’입니다. Selenium은 브라우저에서 HTML 요소를 식별해 클릭하거나 텍스트를 추출하는 방식으로 동작하는데, 이때 주로 사용하는 두 가지 선택자가 바로 XPath와 CSS Selector입니다. 두 방식은 문법, 성능, 가독성 등에서 차이가 있으며, 상황에 따라 적절히 조합해 사용하면 안정적이고 효율적인 자동화를 구현할 수 있습니다.

XPath란 무엇인가?

XPath(XML Path Language)는 XML 문서 내 요소를 탐색하기 위해 설계된 경로 언어로, HTML도 XML 계열 문법이므로 동일하게 적용할 수 있습니다.

  • 문법 특징: 슬래시(/)를 이용해 계층 구조를 지정하며, 속성(@)이나 인덱스([n])로 세밀한 요소 선택이 가능합니다.
  • 강점: 부모·자식 관계를 명확히 지정할 수 있어, 동적 클래스나 복잡한 구조의 페이지에서도 안정적으로 요소를 찾습니다.
  • 단점: 표현식이 길어지고, 작성 및 유지보수가 다소 번거로울 수 있습니다.

CSS Selector란 무엇인가?

CSS Selector는 스타일 시트를 지정하기 위해 사용되는 선택자 문법으로, Selenium에서도 동일하게 요소를 지정할 수 있습니다.

  • 문법 특징: 점(.)으로 클래스, 샵(#)으로 아이디를 지정하며, 콤마(,)나 공백으로 조합할 수 있습니다.
  • 강점: 문법이 간결하고 배우기 쉬우며, 속도 면에서 XPath보다 빠른 편입니다.
  • 단점: 복잡한 계층이나 속성 값 비교에는 한계가 있어, 세밀한 제어가 필요한 경우 불리할 수 있습니다.

XPath와 CSS Selector 문법 비교

driver.find_element("xpath", "//div[@class='item-list']/ul/li[3]/a")
driver.find_element("css selector", "div.item-list > ul > li:nth-child(3) > a")

성능 차이

여러 벤치마크에 따르면, CSS Selector가 브라우저 네이티브 방식으로 처리되기 때문에 XPath보다 약간 더 빠릅니다. 특히 요소가 많고 구조가 단순한 페이지에서는 CSS Selector가 우수한 성능을 보입니다. 반면, 복잡한 계층 구조나 동적 로딩 요소가 섞인 페이지에서는 XPath의 안정성이 더 돋보이기도 합니다.

가독성과 유지보수

CSS Selector는 짧고 직관적인 구문 덕분에 협업 시 이해하기 쉽습니다. 반면, XPath는 요소의 위치나 속성을 상세히 표현할 수 있어 처음 작성할 때는 복잡해도, 나중에 페이지 구조가 변해도 특정 패턴으로 요소를 재탐색하기 유리합니다. 두 방식을 혼용해, 자주 변경되는 영역은 CSS Selector로, 변경 가능성이 낮은 구조에는 XPath를 사용하는 전략이 효과적입니다.

실전 예제: 혼용 활용법

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.naver.com")

search_box = driver.find_element("css selector", "input#query")
search_box.send_keys("Python Selenium")
search_box.submit()

first_link = driver.find_element("xpath", "//ul[@class='list_news']/li[1]//a")
first_link.click()

content = driver.find_element("css selector", "div#content p._article_content")
print(content.text)

driver.quit()

활용 팁 및 주의사항

  • 명시적 대기: 요소가 동적으로 로드되는 경우 WebDriverWaitexpected_conditions를 사용해 안정성을 높이세요.
  • 브라우저 로그 확인: driver.get_log("browser")로 콘솔 에러를 모니터링하면 스크립트 실패 이유를 빠르게 파악할 수 있습니다.
  • 예외 처리: NoSuchElementException을 적절히 처리해, 요소 미발견 시에도 스크립트가 중단되지 않도록 설계하세요.
  • 재사용 가능한 함수: 요소 찾기 로직을 함수로 분리해, 유지보수성과 가독성을 높이세요.

핵심 정리

Selenium에서 요소 찾기는 XPath와 CSS Selector 두 가지 방식을 상황에 맞게 활용하는 것이 중요합니다. CSS Selector는 간결하고 빠른 반면, XPath는 세밀한 제어와 안정성이 강점입니다. 프로젝트 특성과 페이지 구조를 고려해 두 방식을 적절히 조합하면, 보다 견고하고 효율적인 웹 자동화 스크립트를 작성할 수 있습니다.

반응형