Blog

  • 셀레니움 오류 대처법 (가장 흔한 에러 모음)

    셀레니움 오류 대처법 (가장 흔한 에러 모음)

    웹 자동화나 크롤링을 할 때, 셀레니움을 쓰다 보면 다양한 에러를 만나게 됩니다.
    하지만 너무 걱정할 필요는 없습니다. 대부분의 에러는 원인만 알면 쉽게 해결할 수 있습니다.

    오늘은 셀레니움을 사용할 때 자주 발생하는 오류들과 그 해결 방법을 하나씩 정리해보겠습니다.


    1. SessionNotCreatedException

    에러 메시지 예시:
    selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version XX

    원인

    • 사용하는 크롬 브라우저 버전크롬드라이버 버전이 맞지 않을 때 발생합니다.

    해결 방법

    • 크롬 브라우저를 업데이트하거나,
    • 크롬드라이버를 현재 브라우저 버전에 맞게 다시 다운로드해야 합니다.

    참고:
    최신 셀레니움은 Selenium Manager를 통해 자동으로 드라이버를 맞춰줍니다.
    아직 문제가 생긴다면 수동으로 버전 확인이 필요할 수 있습니다.

    bash복사편집pip install --upgrade selenium
    

    또는 직접 크롬드라이버를 업데이트하세요.


    2. NoSuchElementException

    에러 메시지 예시:
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element

    원인

    • 찾으려는 요소가 웹페이지에 아직 로드되지 않았거나,
    • 잘못된 선택자(ID, 클래스명, XPath 등)를 사용했을 때 발생합니다.

    해결 방법

    • WebDriverWait을 사용해 요소가 로딩될 때까지 기다리세요.
    python복사편집from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "my-element"))
    )
    
    • 또는 **선택자(By)**를 다시 확인하세요.

    3. ElementClickInterceptedException

    에러 메시지 예시:
    selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted

    원인

    • 클릭하려는 요소 위에 다른 요소(팝업, 광고 등)가 겹쳐 있을 때 발생합니다.

    해결 방법

    • 팝업을 닫거나, 스크롤을 내려서 요소가 완전히 보이게 만들어야 합니다.
    python복사편집from selenium.webdriver.common.action_chains import ActionChains
    
    ActionChains(driver).move_to_element(element).click().perform()
    

    또는

    python복사편집driver.execute_script("arguments[0].click();", element)
    

    자바스크립트를 이용해 강제로 클릭할 수도 있습니다.


    4. TimeoutException

    에러 메시지 예시:
    selenium.common.exceptions.TimeoutException: Message:

    원인

    • WebDriverWait으로 기다리던 요소가 제한 시간 안에 나타나지 않았을 때 발생합니다.

    해결 방법

    • 기다리는 시간을 늘려보거나,
    • 선택자가 정확한지 다시 한번 확인하세요.
    python복사편집element = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, "target-class"))
    )
    

    또는 네트워크 속도가 느린 경우, 코드 흐름을 다시 최적화하는 것도 필요할 수 있습니다.


    5. StaleElementReferenceException

    에러 메시지 예시:
    selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

    원인

    • 페이지가 리로드되었거나, DOM이 변경되어 요소가 사라진 경우 발생합니다.

    해결 방법

    • 요소를 다시 찾아야 합니다.
    python복사편집element = driver.find_element(By.ID, "my-element")  # 다시 찾기
    element.click()
    

    또는 해당 페이지의 변경 타이밍을 고려해서 기다린 후 다시 접근하세요.


    6. WebDriverException

    에러 메시지 예시:
    selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist

    원인

    • 리눅스 서버나 헤드리스(Headless) 모드에서 환경 설정이 잘못된 경우 발생합니다.

    해결 방법

    • 크롬 옵션을 추가해줘야 합니다.
    python복사편집from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    

    특히 Docker 환경, AWS EC2 같은 서버에서는 필수로 설정해야 안정적으로 동작합니다.


    추가 팁: 에러를 예방하는 습관

    • **명시적 대기(WebDriverWait)**를 적극 활용하세요.
    • 선택자(By)를 정확하게 작성하세요.
      (ID, 클래스명, 태그 구조를 잘 확인)
    • **에러 핸들링(Try-Except)**으로 예상치 못한 오류에도 대비하세요.
    python복사편집from selenium.common.exceptions import NoSuchElementException
    
    try:
        driver.find_element(By.ID, "element-id").click()
    except NoSuchElementException:
        print("요소를 찾을 수 없습니다.")
    

    마무리

    셀레니움을 쓰면서 처음에는 다양한 오류를 겪을 수 있습니다.
    하지만 원인과 해결 방법을 알고 나면, 오히려 셀레니움과 더 친해질 수 있습니다.

    “에러는 성장의 신호”라고 합니다.
    오류를 만날 때마다 하나하나 해결해나가면서 여러분의 자동화 실력은 크게 성장할 것입니다.

    웹 브라우저를 자유자재로 다루는 그날까지, 포기하지 말고 함께 셀레니움 실력을 키워봐요! 🚀