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.
To work with different nested iframes, we can use the method switchTo() to switch the frames using Index, Name, or Id & Web Element. Moreover, you can switch to immediate parent iframe using method switchTo(). parentFrame(). You can switch to the main web page from child iframe using method switchTo().
We have to come out of the iframe. To move back to the parent frame, you can either use switchTo(). parentFrame() or if you want to get back to the main (or most parent) frame, you can use switchTo(). defaultContent();
Interact with elements of Nested iFrames If an iFrame has another iFrame, then we call it as nested iFrame. In such a case, we need to switch to iFrame within the iFrame. The content of nested iFrame is only available from inside an iFrame. We can't access elements from outside the iFrame.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With