개발자/파이썬
파이썬 자동화 셀레늄(Selenium) iframe 문제 해결 (feat. no such element: Unable to locate element)
june__kim
2021. 8. 5. 23:43
파이썬 자동화 셀레늄(Selenium) iframe 문제 해결 (feat. no such element: Unable to locate element)
요즘 Selenium으로 다시 자동화를 조금 만지고 있는다.
사실 대부분 하면서 크게 문제는 없는데 이상하게 어떤 웹페이지에서는 find_element_by_OO 메소드가 안 먹히더라.
코드상에서,
elem = driver.find_element_by_id("category0")
요로케 찾는 코드를 작성했다.
근데 에러가 뜬다?!
no such element: Unable to locate element:
결론은 element를 찾지 못한다는 것,,
분명 ctrl + f 로 찾아봤을 때, id가 category0인 요소가 존재한다! (아래 그림으로 확인)
이거 왜 그런 걸까 찾아보니 문제는 iframe이라는 것 때문이었다.
위의 코드를 보면 body태그 하위에 iframe으로 크게 묶여있다.
여기서 iframe이란, 간단하게 설명하면 웹페이지 안에 있는 웹페이지를 의미한다.
(iframe = inline frame)
이때, iframe은 자체의 DOM을 갖고 있다고 한다.
결론적으로, 이 iframe 때문에 element를 찾지 못했던 것이다!
그렇다면 해결책은 switch_to.frame()이라는 메소드를 이용해 해결할 수 있다.
구체적으로 코드를 통해 살펴보면,
iframe = driver.find_element_by_id("mainFrame") # id가 mainFrame이라는 요소를 찾아내고 -> iframe임
driver.switch_to.frame(iframe) # 이 iframe이라는 요소로 focus한다.
결국은 이 switch_to.frame() 이라는 메소드를 이용해 우리가 원하는 iframe에 focus를 하면 된다.
이렇게 해주고 다시 위에서 작성했던
elem = driver.find_element_by_id("category0")
이 코드를 실행하면 잘 찾아진다.
-끝-