通过 Selenium 和 python 切换到 iframe

Posted

技术标签:

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

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

<iframe name="Dialogue Window">

【问题讨论】:

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

使用通过css-selectors标识的&lt;iframe&gt;WebElement如下:

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

使用通过xpath标识的&lt;iframe&gt;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");

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于通过 Selenium 和 python 切换到 iframe的主要内容,如果未能解决你的问题,请参考以下文章

错误切换到iframe selenium python

Selenium+python怎么让鼠标焦点切换到当前窗口里面的子窗口子窗口

selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

基于python实现UI自动化4. 一文搞定selenium 多表单(iframe/ frame)切换

基于python实现UI自动化4. 一文搞定selenium 多表单(iframe/ frame)切换

单击按钮后切换到打开的新浏览器 [Python][Selenium]