【问题标题】: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 来定位 <iframe>:
iframe = driver.find_element_by_xpath("//iframe[@name='Dialogue Window']")
然后switch_to<iframe>:
driver.switch_to.frame(iframe)
这里是如何切换回默认内容(在<iframe>之外):
driver.switch_to.default_content()
【解决方案2】:
根据<iframe> 元素的HTML,它的name 属性设置为对话窗口。因此,要在<iframe> 内切换,您需要使用switch_to() 方法,您可以使用以下任一方法:
-
使用<iframe>节点的name属性如下:
# 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']"))
理想情况下,您应该将WebDriverWait 与expected_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");