Alpinestar22 Alpinestar22 - 1 month ago 24
Python Question

Python Selenium switch into an iframe within an iframe

I am trying to access an iframe within an iframe using Selenium, Python, and BS4

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import html5lib

driver = webdriver.Firefox()
driver.implicitly_wait(10)

driver.get('http://myurl.com')
try:
time.sleep(4)
iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to_default_content()

driver.switch_to_frame(iframe)
driver.switch_to_default_content()
driver.find_elements_by_tag_name('iframe')[0]

output = driver.page_source

print output

finally:
driver.quit();


Within the returned text, there appears to be two more iframes. How would I access those? I have attempted in the code above without success.

Any help is appreciated.

Answer

switch_to_default_content() will return you to the top of the document. What was happening is you switched into the first iframe, switched back to the top of the document, then tried to find the second iframe. Selenium can't find the second iframe, because it's inside of the first iframe.

If you remove the second switch_to_default_content() you should be fine:

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to_default_content()

driver.switch_to_frame(iframe)
driver.find_elements_by_tag_name('iframe')[0]