본문 바로가기
Python/Selenium

Selenium MoveTargetOutOfBoundsException: (X, Y) coordinates are out of bounds 오류 해결하기

by PySun 2025. 2. 3.
반응형

소개

Selenium을 사용하다 보면 'MoveTargetOutOfBoundsException: (X, Y) coordinates are out of bounds'라는 오류를 만날 수 있습니다. 이 오류는 주로 웹페이지 상에서 지정한 좌표가 요소의 범위를 벗어나도록 움직일 때 발생합니다. 이 블로그 글에서는 이 에러가 발생하는 원인과 이를 해결하기 위한 여러 가지 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'MoveTargetOutOfBoundsException' 에러가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 웹드라이버 초기화
driver = webdriver.Chrome()
driver.get('https://www.example.com')

# 이동할 요소 선택
element = driver.find_element_by_id('some-element-id')

# 잘못된 좌표로 이동 시도
action = ActionChains(driver)
action.move_to_element_with_offset(element, 500, 500).perform()  # 잘못된 좌표

에러 해결 방법

1. 올바른 좌표 계산하기

잘못된 좌표로 이동을 시도하는 경우가 많습니다. 적절한 좌표를 항상 계산하여 사용해야 합니다. 경우에 따라 요소의 크기를 고려하면서 이동하도록 합시다.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 웹드라이버 초기화
driver = webdriver.Chrome()
driver.get('https://www.example.com')

# 이동할 요소 선택
element = driver.find_element_by_id('some-element-id')

# 요소의 크기를 기반으로 이동할 좌표 조정
element_size = element.size
action = ActionChains(driver)
action.move_to_element_with_offset(element, element_size['width']/2, element_size['height']/2).perform()  # 중간 지점으로 이동

2. 스크롤하여 요소를 보이게 하기

이 동작을 수행하기 전에 해당 요소가 실제로 화면에 나타나는지 확인합니다. 때로는 요소가 스크롤이나 화면 외에 있어 이동할 수 없는 경우가 있습니다.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

# 웹드라이버 초기화
driver = webdriver.Chrome()
driver.get('https://www.example.com')

# 이동할 요소 선택
element = driver.find_element(By.ID, 'some-element-id')

# 스크롤하여 요소가 보이게 하기
driver.execute_script("arguments[0].scrollIntoView();", element)

# 요소의 크기를 기반으로 이동할 좌표 조정
action = ActionChains(driver)
element_size = element.size
action.move_to_element_with_offset(element, element_size['width']/2, element_size['height']/2).perform()

3. 예외 처리 추가하기

예외가 발생할 가능성을 줄이기 위해, 코드에서 try-except 블록을 사용하여 오류를 처리할 수 있습니다. 이를 통해 프로그램의 비정상적인 종료를 방지할 수 있습니다.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.common.exceptions import MoveTargetOutOfBoundsException

# 웹드라이버 초기화
driver = webdriver.Chrome()
driver.get('https://www.example.com')

try:
    # 이동할 요소 선택
    element = driver.find_element(By.ID, 'some-element-id')
    
    # 요소를 화면에 보이게 하기
    driver.execute_script("arguments[0].scrollIntoView();", element)
    
    # 크기 조정 및 이동
    element_size = element.size
    action = ActionChains(driver)
    action.move_to_element_with_offset(element, element_size['width']/2, element_size['height']/2).perform()

except MoveTargetOutOfBoundsException:
    print("지정한 좌표가 범위를 벗어났습니다. 올바른 좌표를 확인하세요.")

마무리

이번 블로그 글에서는 Selenium을 활용할 때 발생할 수 있는 'MoveTargetOutOfBoundsException' 에러에 대한 다양한 해결 방법을 알아보았습니다. 올바른 좌표를 사용하고, 필요 시 요소를 스크롤하여 보이게 하고, 예외 처리를 추가함으로써 이 오류를 극복할 수 있습니다. Selenium을 활용할 때는 항상 이러한 점에 유의하며 안정적인 웹 자동화를 구현해 나가세요.

반응형