파이썬 셀레니움(Selenium) 에러 발생 및 웹 드라이버로 불러온 소스에 iframe 태그 내용이 없습니다.
조회수 6972회
제가 테스팅 중인 웹사이트에 iframe 태그가 있고 이 태그안에 존재하는 버튼(a 태그)을 클릭해야합니다. 브라우저에서 개발자 도구로 살펴보면 iframe 태그 내에 내용이 들어있는 것을 확인할 수 있는데, page_source
로 불러온 HTML을 보면 iframe 태그 사이에 아무런 내용이 들어있지 않습니다.
<iframe id="conFrame" src="..."> # 브라우저 개발자 도구에서 볼 때
<html>
...
</html>
</iframe>
<iframe id="conFrame" src="..."></iframe> # page_source로 볼 때
이 때문에 iframe 안에있는 a 태그에 접근하기만 하면, 엘리먼트를 찾을 수 없다는 에러가 발생하는 것 같습니다.
print(driver.find_element_by_tag_name("a"))
selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with tag name == a
아래와 같은 방식으로 frame 지정을 해보아도 에러가 발생하는데, 뭐 때문에 이런 현상이 나타나는건지 궁금합니다. 로드가 다 되지 않아서 그런 것인지, sleep()
함수로 텀을 넉넉하게 두고 접근해보아도 계속 에러가 발생하네요.
# Frame 지정
driver.switch_to.frame(driver.find_element_by_id("conFrame"))
driver.switch_to.frame("conFrame")
왜 이런 현상이 나타나는지,어떻게 해야 iframe 내에 a 태그에 접근할 수 있는지 궁금합니다. 도움 부탁드립니다.
InternetExplorer 11.953.14393.0 , IEDriverServer.exe
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
switch_to_frame이라고 해야 하는것 같네요. 로컬에 iframe을 갖는 html파일을 만들고 아래와 같이 했더니 iframe안에 있는 html을 잘 읽어 옵니다.
from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome('your/path/to/chromedriver') driver.get('file:///your/path/a.html') driver.switch_to_frame(driver.find_element_by_tag_name("iframe")); print(driver.page_source)
댓글 입력