Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Switch to an iframe through Selenium and python

How would I switch to this iframe in selenium knowing only

<iframe name="Dialogue Window"> 
like image 924
Sarah H. Avatar asked Jun 29 '17 20:06

Sarah H.


People also ask

How do I switch IFrames in Python Selenium?

Switch Between IFrames Using Selenium Python. If a webpage contains multiple IFrames, then we will need to switch between them. Selenium Python API provides “switch_to. iframe (self, frame_reference)” method to move to a particular IFrame.


Video Answer


2 Answers

You can use an XPath to locate the <iframe>:

iframe = driver.find_element_by_xpath("//iframe[@name='Dialogue Window']") 

Then switch_to the <iframe>:

driver.switch_to.frame(iframe) 

Here's how to switch back to the default content (out of the <iframe>):

driver.switch_to.default_content() 
like image 93
budi Avatar answered Oct 05 '22 23:10

budi


As per the HTML of the <iframe> element, it has the name attribute set as Dialogue Window. So to switch within the <iframe> you need to use the switch_to() method and you can use either of the following approaches:

  • Using the name attribute of the <iframe> node as follows:

    # driver.switch_to.frame(‘frame_name’) driver.switch_to.frame("Dialogue Window") 
  • Using the <iframe> WebElement identified through name attribute as follows:

    driver.switch_to.frame(driver.find_element_by_name('Dialogue Window')) 
  • Using the <iframe> WebElement identified through css-selectors as follows:

    driver.switch_to.frame(driver.find_element_by_css_selector("iframe[name='Dialogue Window']")) 
  • Using the <iframe> WebElement identified through xpath as follows:

    driver.switch_to.frame(driver.find_element_by_css_selector("//iframe[@name='Dialogue Window']")) 

Ideally, you should induce WebDriverWait inconjunction with expected_conditions as frame_to_be_available_and_switch_to_it() for the desired frame as follows:

  • Using NAME:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"Dialogue Window")))  
  • Using CSS_SELECTOR:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name='Dialogue Window']"))) 
  • Using XPATH:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='Dialogue Window']"))) 

Switching back from frame

  • To switch back to the Parent Frame you can use the following line of code:

    driver.switch_to.parent_frame() 
  • To switch back to the Top Level Browsing Context / Top Window you can use the following line of code:

    driver.switch_to.default_content() 

tl; dr

Ways to deal with #document under iframe

like image 28
undetected Selenium Avatar answered Oct 06 '22 00:10

undetected Selenium