개발자/파이썬

파이썬 자동화 셀레늄(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")

이 코드를 실행하면 잘 찾아진다.

 

 

-끝-