如何使用Python在iframe中切换Selenium焦点

如何使用Python在iframe中切换Selenium焦点,python,selenium,iframe,webdriverwait,expected-condition,Python,Selenium,Iframe,Webdriverwait,Expected Condition,我无法从网站的下拉菜单中选择复选框。下拉列表位于iframe内部,当我尝试切换到iframe时,我会不断收到TimeoutException消息: 下面是我正在尝试的代码和HTML。我是Python新手,因此在此方面的任何帮助都将不胜感激 Python: wait = WebDriverWait(driver, 20) frm1= wait.until(EC.presence_of_element_located((By.ID, "ReportViewerControl_ctl04_

我无法从网站的下拉菜单中选择复选框。下拉列表位于iframe内部,当我尝试切换到iframe时,我会不断收到
TimeoutException
消息:

下面是我正在尝试的代码和HTML。我是Python新手,因此在此方面的任何帮助都将不胜感激

Python:

wait = WebDriverWait(driver, 20)

frm1= wait.until(EC.presence_of_element_located((By.ID, "ReportViewerControl_ctl04_ctl03_ctl01")))

driver.switch_to.frame(frm1)
HTML:


切换
中的焦点,而不是
元素的存在()
,因此您必须:

  • 诱导WebDriverWait以使所需帧可用并切换到该帧
  • 您可以使用以下任一选项:
    • 使用
      CSS\u选择器

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='ReportViewerControl'][longdesc='Area place holder']")))
      
    • 使用
      XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id, 'ReportViewerControl') and @title='Area place holder']")))
      
    • 注意:您必须添加以下导入:

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

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

中切换焦点,而不是
元素的存在()
,因此您必须:

  • 诱导WebDriverWait以使所需帧可用并切换到该帧
  • 您可以使用以下任一选项:
    • 使用
      CSS\u选择器

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='ReportViewerControl'][longdesc='Area place holder']")))
      
    • 使用
      XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id, 'ReportViewerControl') and @title='Area place holder']")))
      
    • 注意:您必须添加以下导入:

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

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


谢谢,我发现在我试图切换到的iframe之外有一个iframe。我只需要先切换到主iframe,然后再切换到上面的iframe。@Chadc很高兴能够帮助您。你觉得很有帮助。谢谢,我发现在我想切换到的iframe之外有一个iframe。我只需要先切换到主iframe,然后再切换到上面的iframe。@Chadc很高兴能够帮助您。你觉得很有帮助。看见