通过 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 来定位 <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()
【讨论】:
很好的通用解决方案,特别是如果 iframe 必须以name
以外的其他对象为目标 - 这实际上是 the selenium docs 指定转换的唯一方法【参考方案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");
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于通过 Selenium 和 python 切换到 iframe的主要内容,如果未能解决你的问题,请参考以下文章
Selenium+python怎么让鼠标焦点切换到当前窗口里面的子窗口子窗口
selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等
基于python实现UI自动化4. 一文搞定selenium 多表单(iframe/ frame)切换