如何使用Selenium和python切换到iframe?

如何使用Selenium和python切换到iframe?,python,selenium,xpath,iframe,css-selectors,Python,Selenium,Xpath,Iframe,Css Selectors,我已经将Selenium用于许多项目,没有遇到任何问题。然而,这一次没有骰子 我正在尝试自动化签出过程,有时会出现重新输入信息的提示。该窗口有一个javascript弹出窗口(我想),虽然我可以毫无问题地选择部分,但我无法找到iframe并专注于它 因此,这是可行的: driver.find_elements_by_id('app') 但是,无法识别帧并切换到它。例如,这些都不起作用: driver.find_element_by_id() driver.find_element_by_nam

我已经将Selenium用于许多项目,没有遇到任何问题。然而,这一次没有骰子

我正在尝试自动化签出过程,有时会出现重新输入信息的提示。该窗口有一个javascript弹出窗口(我想),虽然我可以毫无问题地选择
部分,但我无法找到
iframe
并专注于它

因此,这是可行的:

driver.find_elements_by_id('app')
但是,无法识别帧并切换到它。例如,这些都不起作用:

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_xpath()
我假设是因为我无法找到并切换到iframe

帮忙

在您的情况下,您可以使用:

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"));
要切换回主要用途,请执行以下操作:

driver.switch_to_default_content()

请尝试此代码切换到帧

frame = driver.find_element_by_xpath('//div[starts-with(@id, "zoid-ec-payment")]/iframe')
driver.switch_to.frame(frame)

文本为电子邮件登录名的元素位于
中,因此您必须:

  • 使所需帧可用并切换到该帧

  • 您可以使用以下任一选项:

    • 使用
      CSS\u选择器

      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.zoid-visible[title='ec_payment'][name^='__zoid__ec__payment']")))
      
    • 使用
      XPATH

      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='zoid-visible' and @title='ec_payment'][starts-with(@name, '__zoid__ec__payment')]")))
      
  • 注意:您必须添加以下导入:

     from selenium.webdriver.support.ui import WebDriverWait
     from selenium.webdriver.common.by import By
     from selenium.webdriver.support import expected_conditions as EC
    

参考文献 您可以在以下内容中找到一些相关讨论:


各位,感谢你们提供的快速且(我期待)有用的答案。我要到今晚晚些时候或者明天才能测试出来。我会随时通知你的。德班詹布,谢谢你!这让我挺过来了!
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='zoid-visible' and @title='ec_payment'][starts-with(@name, '__zoid__ec__payment')]")))
 from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.common.by import By
 from selenium.webdriver.support import expected_conditions as EC