【问题标题】:Switch to an iframe through Selenium and python通过 Selenium 和 python 切换到 iframe
【发布时间】:2017-12-03 16:47:14
【问题描述】:

我如何只知道在 selenium 中切换到这个 iframe

<iframe name="Dialogue Window">

【问题讨论】:

  • 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask

标签: python selenium selenium-webdriver iframe webdriver


【解决方案1】:

您可以使用 XPath 来定位 &lt;iframe&gt;:

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

然后switch_to&lt;iframe&gt;

driver.switch_to.frame(iframe)

这里是如何切换回默认内容(在&lt;iframe&gt;之外):

driver.switch_to.default_content()

【讨论】:

  • 很好的通用解决方案,特别是如果 iframe 必须以 name 以外的其他对象为目标 - 这实际上是 the selenium docs 指定转换的唯一方法
【解决方案2】:

根据&lt;iframe&gt; 元素的HTML,它的name 属性设置为对话窗口。因此,要在&lt;iframe&gt; 内切换,您需要使用switch_to() 方法,您可以使用以下任一方法:

  • 使用&lt;iframe&gt;节点的name属性如下:

    # driver.switch_to.frame(‘frame_name’)
    driver.switch_to.frame("Dialogue Window")
    
  • 使用通过name属性标识的&lt;iframe&gt;WebElement如下:

    driver.switch_to.frame(driver.find_element_by_name('Dialogue Window'))
    
  • 使用通过标识的&lt;iframe&gt;WebElement如下:

    driver.switch_to.frame(driver.find_element_by_css_selector("iframe[name='Dialogue Window']"))
    
  • 使用通过标识的&lt;iframe&gt;WebElement如下:

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

理想情况下,您应该将WebDriverWaitexpected_conditions 结合为frame_to_be_available_and_switch_to_it(),以获得所需的框架,如下所示:

  • 使用名称

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

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

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

从框架切换回来

  • 要切换回父框架,您可以使用以下代码行:

    driver.switch_to.parent_frame()
    
  • 要切换回顶级浏览上下文 / 顶级窗口,您可以使用以下代码行:

    driver.switch_to.default_content()
    

tl;博士

Ways to deal with #document under iframe

【讨论】:

    【解决方案3】:

    我已经在 Python-Selenium 中解决了这个问题。请使用以下代码:

    srtHandle = driver.window_handles
    driver.switch_to_window(srtHandle[0])
    

    然后切换到元素所在的框架。

    【讨论】:

      【解决方案4】:

      driver.switch_to.frame("FRAME_NAME");

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2014-06-11
      • 2018-07-22
      • 2023-03-07
      • 2020-10-06
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多