通过Selenium和python切换到iframe

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/44834358/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 00:30:39  来源:igfitidea点击:

Switch to an iframe through Selenium and python

pythonseleniumselenium-webdriveriframewebdriver

提问by Sarah H.

How would I switch to this iframe in selenium knowing only

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

<iframe name="Dialogue Window">

回答by budi

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

您可以使用 XPath 来定位<iframe>

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

Then switch_tothe <iframe>:

然后switch_to<iframe>

driver.switch_to.frame(iframe)


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

以下是切换回默认内容(在 之外<iframe>)的方法:

driver.switch_to.default_content()

回答by DebanjanB

As per the HTML of the <iframe>element, it has the nameattribute 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:

根据<iframe>元素的 HTML ,它的name属性设置为Dialogue Window。因此,要在<iframe>您需要使用该switch_to()方法的范围内切换,您可以使用以下任一方法:

  • Using the nameattribute of the <iframe>node as follows:

    # driver.switch_to.frame(‘frame_name')
    driver.switch_to.frame("Dialogue Window")
    
  • Using the <iframe>WebElementidentified through nameattribute as follows:

    driver.switch_to.frame(driver.find_element_by_name('Dialogue Window'))
    
  • Using the <iframe>WebElementidentified through css-selectorsas follows:

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

    driver.switch_to.frame(driver.find_element_by_css_selector("//iframe[@name='Dialogue Window']"))
    
  • Ideally, you should induce WebDriverWaitinconjunction with expected_conditionsas frame_to_be_available_and_switch_to_it()for the desired frameas 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']")))
      
  • To switch back to the Parent Frameyou can use the following line of code:

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

    driver.switch_to.default_content()
    
  • 使用节点的name属性<iframe>如下:

    # driver.switch_to.frame(‘frame_name')
    driver.switch_to.frame("Dialogue Window")
    
  • 使用通过name属性标识的<iframe>WebElement如下:

    driver.switch_to.frame(driver.find_element_by_name('Dialogue Window'))
    
  • 使用通过css-selectors标识的<iframe>WebElement如下:

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

    driver.switch_to.frame(driver.find_element_by_css_selector("//iframe[@name='Dialogue Window']"))
    
  • 理想情况下,应当诱导WebDriverWaitinconjunction与expected_conditions作为frame_to_be_available_and_switch_to_it()用于期望如下:

    • 使用NAME

      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; dr

tl; 博士

Ways to deal with #document under iframe

iframe下#document的处理方式