본문 바로가기

자동화/Selenium

Selenium Element Click이 실패할 때 사용할 수 있는 대안 방법들

728x90

Selenium를 하다보면 가장 많이 사용하는 동작이 Click입니다.

Click를 해야 다음 절차로 넘어갈 수 있기 때문에 꼭 필요한데요.

일반적으로는 click() 방법을 많이 사용하지만 가끔 의도치 않게 다양한 오류가 발생하여 동작이 실패하는 경우가 있습니다.

 

- selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted

- selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

 

그로 인해 다른 방법들을 대안으로 사용하였는데 Click이 필요할 때 사용했던 4가지를 소개하려고 합니다.

 

예시 코드의 element class_name은 네이버 홈 로그인 버튼으로 공통으로 통일되게 사용하였으며 언어는 파이썬을 선택하였습니다.

 

1. click()

 

아마 가장 많이 사용되는 방법으로 제 경험상 80% 이상은 해당 방법으로 문제 없이 Click 기능을 자동화 할 수 있습니다.

 

driver.find_element(By.CLASS_NAME, 'link_login').click()

 

2. send_keys(Keys.ENTER)

 

click()이 정상적으로 동작되지 않을 때 대안으로 가장 많이 사용하는 방식으로 click()과 send_keys(Keys.ENTER) 2가지 방법만 알아도 대부분의 element를 click할 수 있습니다.

 

driver.find_element(By.CLASS_NAME, 'link_login').send_keys(Keys.ENTER)

 

3. execute_script("arguments[0].click();")

 

javascript 코드를 통해 click를 하는 방식으로 코드가 1줄로 처리하기에는 길지만 해당 방식으로 click이 성공하는 경우도 있습니다.

 

element = driver.find_element(By.CLASS_NAME, 'link_login')
driver.execute_script("arguments[0].click();", element)

 

4. ActionChains().click().perform()

 

ActionChains 기능에 있는 click을 사용하는 방식입니다.

1번 방식과 동일한 이름의 click() 이지만 1번 방식에서 click 실패하는 경우에 해당 방식으로는 성공하는 케이스도 경험할 수 있었습니다.

 

clickable = driver.find_element(By.CLASS_NAME, 'link_login')
ActionChains(driver).click(clickable).perform()

 

저의 경우 Selenium을 사용하면서 위 4가지 방식이 모두 실패하는 경우는 발견하지 못했는데요.

해당 방식이 만약 있다면 다른 방식을 또 찾아서 공부해보는 것도 좋을거 같습니다.

 

Selenium을 공부하시는 모든 분들도 click에서 실패할 때 유용하게 사용하시길 바랍니다.

 

728x90