파이썬 셀레니움(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)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)