Selenium Element Click이 실패할 때 사용할 수 있는 대안 방법들
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에서 실패할 때 유용하게 사용하시길 바랍니다.