본문 바로가기
Python/Selenium

Selenium SelectorMismatchException 해결하기

by PySun 2025. 2. 17.
반응형

소개

Selenium을 사용하다 보면 다양한 에러에 직면하게 됩니다. 그 중 하나가 바로 'SelectorMismatchException'입니다. 이 오류는 주로 선택자가 예기치 않은 형식이거나 요소를 제대로 찾지 못할 때 발생합니다. 이 글에서는 이 에러의 원인과 여러 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'SelectorMismatchException'이 발생할 수 있는 간단한 예시 코드를 보겠습니다.

from selenium import webdriver
from selenium.common.exceptions import SelectorMismatchException

# 새로운 웹드라이버 생성
driver = webdriver.Chrome()

# 웹페이지 열기
driver.get("https://example.com")

try:
    # 잘못된 선택자 사용
    element = driver.find_element_by_css_selector(".nonexistent-class")
except SelectorMismatchException as e:
    print("SelectorMismatchException 발생:", e)
finally:
    driver.quit()

에러 해결 방법

1. 선택자 확인 및 수정하기

가장 먼저 확인해야 할 것은 선택자의 정확성입니다. 선택자가 페이지 내에서 실제로 존재하는지 확인해 보세요. 잘못된 선택자를 사용함으로써 발생하는 오류를 피하기 위해서는 선택자를 검증하는 과정이 중요합니다.

from selenium import webdriver

# 새로운 웹드라이버 생성
driver = webdriver.Chrome()

# 웹페이지 열기
driver.get("https://example.com")

# 올바른 선택자 사용
element = driver.find_element_by_css_selector("h1")  # h1 태그를 올바르게 선택
print(element.text)

driver.quit()

2. 다양한 선택자 방식 사용하기

Selenium은 다양한 선택자 방식을 지원합니다. CSS 선택자 외에도 XPath를 사용할 수 있습니다. 상황에 따라 다른 선택자를 사용해 보세요.

from selenium import webdriver

# 새로운 웹드라이버 생성
driver = webdriver.Chrome()

# 웹페이지 열기
driver.get("https://example.com")

# XPath를 사용하여 요소 찾기
element = driver.find_element_by_xpath("//h1")  # h1 태그를 XPath로 선택
print(element.text)

driver.quit()

3. 대기 시간 추가

어떤 경우에는 웹 페이지가 로드되는 데 시간이 걸려 요소를 찾지 못하는 경우가 있습니다. 이럴 땐 명시적 대기(explicit wait)를 도입해 요소가 나타날 때까지 기다릴 수 있습니다.

from selenium import webdriver
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()

# 웹페이지 열기
driver.get("https://example.com")

# 명시적 대기 사용
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))  # h1 요소가 로드될 때까지 대기
    )
    print(element.text)
finally:
    driver.quit()

마무리

이 블로그 글에서는 Selenium에서 발생하는 'SelectorMismatchException'의 원인과 여러 가지 해결 방법에 대해 알아보았습니다. 선택자를 올바르게 확인하고, 다양한 선택자 방식을 사용하며, 명시적 대기를 추가하는 것이 중요합니다. Selenium을 사용할 때는 항상 선택자가 정확한지 검토하고, 웹 페이지의 로딩 상태를 고려하는 것이 필요합니다. 행복한 자동화 프로그래밍 되세요!

반응형