반응형

<참조> https://www.selenium.dev/documentation/webdriver/browser/frames/

파이썬, 셀레니움에서 버튼이나 엘리먼트 접근 못하는 경우, iframe

 

글. 수알치 오상문

 

다음과 같은 페이지가 있고 버튼에 접근하려고 하지만 실패합니다. 요즘은 웹사이트를 만들 때 iframe 구조를 사용하지 않지만 예전 사이트 중에는 이런 iframe 구조를 사용하는 경우가 있습니다.

<div id="modal">
  <iframe id="buttonframe" name="myframe"  src="https://seleniumhq.github.io">
   <button>Click here</button>
 </iframe>
</div>

driver.find_element(By.TAG_NAME, 'button').click()    <--- 실패!!!

 

iframe에 있는 요소에 접근하려면 다음처럼 처리합니다.

 

# iframe 선택 방법 1: css 셀렉터로 접근  
iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
driver.switch_to.frame(iframe)
# iframe 선택 방법 2: id로 접근 (가장 처음 것으로 접근)
driver.switch_to.frame('buttonframe')
# iframe 선택 방법 3: name으로 접근 (가장 처음 것으로 접근)
driver.switch_to.frame('mframe')
# iframe 선택 방법 4: iframe 태그 중에서 인덱스로 접근 
iframe = driver.find_elements_by_tag_name('iframe')[1]
driver.switch_to.frame(iframe)
#------------------------------------------------------------
# iframe에서 요소를 다룬다. (예; 버튼 클릭)
driver.find_element(By.TAG_NAME, 'button').click()
#------------------------------------------------------------
# iframe 빠져나가기, 기본 페이지로 돌아가기
driver.switch_to.default_content()
반응형

+ Recent posts