파이썬 자동화 셀레늄(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")
이 코드를 실행하면 잘 찾아진다.
-끝-
'개발자 > 파이썬' 카테고리의 다른 글
파이썬(Python) 가상환경으로 패키지 관리하기 (feat. venv, MacOS) (1) | 2021.07.15 |
---|---|
파이썬(Python) TabError: inconsistent use of tabs and spaces in indentation (feat. vscode) (3) | 2021.06.02 |
Python/Django TemplateDoesNotExist 에러 처리 방법!! (1) | 2021.05.31 |
파이썬 재무제표 스크래핑으로 내가 원하는 주식 찾기(feat. 네이버금융) (3) | 2021.01.04 |
파이썬 셀레니움 (Selenium) headless (0) | 2021.01.03 |