Skip to content Skip to sidebar Skip to footer

How To Switch Between Iframes Using Selenium And Python?

I'm trying to make a script to checkout on a Shopify site and I was able to find the iframe for the card number, but was not able to find the iframe for the name on the card (2nd i

Solution 1:

The card number and name fields are in different <iframe> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it for the card number field.

  • Switch to the Default Content

  • Induce WebDriverWait for the desired frame to be available and switch to it for the name field.

  • You can use either of the following based Locator Strategies:

    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='card-fields-iframe' and starts-with(@id, 'card-fields-number')]")))
    # perform other operations
    driver.switch_to.default_content()
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='card-fields-iframe' and starts-with(@id, 'card-fields-name')]")))
    
  • Note : You have to add the following imports :

    from selenium.webdriver.support.uiimportWebDriverWaitfrom selenium.webdriver.common.byimportByfrom selenium.webdriver.supportimport expected_conditions asEC

Reference

You can find a couple of relevant discussions in:

Solution 2:

Use unique locator as you do for any other elements

The syntax for switch to frame is

   driver.switch_to.frame(WebElement)

So you don't need use just tag name , you can use xpath , Id , css etc like anyothr element

We use tag usually because there will be only one iframe in most cases . If you have multiple iframes find each iframes uniquely as you do for other elements using any other attributes like I'd,class etc of the specific iframe

driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@id="card-fields-name-fpsn1ey65to00000"]'))

Solution 3:

I'd suggest using the parent tag as it has a more identifiable div tag that can be xpathed to.This way you can just go to the iframe you want before finding the input tag to send keys to.

driver.switch_to.frame(driver.find_element_by_xpath("div[@data-card-fields='number']/iframe"))

Post a Comment for "How To Switch Between Iframes Using Selenium And Python?"