프로그래밍/Crawling

[Selenium] iframe 변경하는 방법 / 상위 프레임으로 변경하는 방법

seojeon9 2022. 8. 18. 23:02

문제상황

네이버 맵에서 셀레니움을 사용하여 동적크롤링으로 식당 정보들을 수집하려고 한다.
개발자 도구에서는 원하는 데이터 값이 보이는데 class_name, xpath 온갖 방법을 써도 객체 자체를 못 얻어오길래
다른 방법도 시도해보고 얼레벌레 이틀을 꼬박 매달렸다.

그런데 추출이 되지 않았던 이유는 바로 해당 태그들이 iframe안에 있기 때문이었다.

 

해결방법

추출하고 싶은 데이터의 위쪽으로 살펴보다 보면 iframe이라는 부모 태그를 찾을 수 있을 것이다.

<iframe id="이름">

 

iframe의 id를 찾았다면 셀리니움 드라이버에서 프레임을 변경하여 안쪽 태그를 추출할 수 있다.

driver.switch_to.frame('이름') #네이버 맵

 

만약 id를 잘 모르겠다면 모든 속성을 뽑아내서 살펴볼 수 있다.

# 프레임 살펴보기
iframes = driver.find_elements_by_css_selector('iframe')
for iframe in iframes:
    print(iframe.get_attribute('name'))

 

 

iframe으로 들어가서 작업을 하다가 다시 상위 프레임으로 넘어와야 할 일이 생길 것이다.

그때는 해당 코드를 통해 원래의 태크 체제로 빠져나오면 된다!

driver.switch_to.default_content()

 

 

이틀간의 뻘짓 끝~~

여러분들은 이 게시글을 통해 빠르게 해결하시길 바라요

728x90