微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 我怎样才能选择一个html元素,无论它在selenium中的框架是什么?

我正在尝试选择一个位于iframe内部的元素,可能还有其他iframe.

是否有可能在(python)selenium中的某些(子)iframe中选择一个元素而不选择之前的iframe?有没有办法以某种方式“循环”每个iframe,并检查在哪里找到我的元素……?

如何在case元素和html的东西和iframe可能只是加载…?

解决方法:

不,无法通过Selenium与iframe中的任何WebElement进行交互,而无需切换到相应的iframe.

原因:

加载页面时,Selenium的焦点认保留在Top Window上.顶部窗口包含其他iframe和框架集.因此,当我们需要与iframe中的WebElement进行交互时,我们必须通过以下提到的方法之一切换到相应的iframe:

帧切换方法

我们可以通过3种方式切换到帧.

按帧名称

iframe的Name属性,我们可以通过它转换到它.

例:

driver.switch_to.frame("iframe_name")

按帧ID:

iframe的ID属性,我们可以通过它转换到它.

例:

driver.switch_to.frame("iframe_id")

按帧索引:

假设页面中有10个帧,我们可以使用索引切换到iframe.

例:

driver.switch_to.frame(0)
driver.switch_to.frame(1)

切换回主框架:

我们可以使用default_content()或parent_frame()切换回主框架

例:

driver.switch_to.default_content()
driver.switch_to.parent_frame()

切换帧的更好方法

切换帧的更好方法是使用预期帧的可用性来引导webdriverwait,其中expected_conditions设置为frame_to_be_available_and_switch_to_it,如下所示:

>通过帧ID:

webdriverwait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))

>通过框架名称

webdriverwait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.NAME,"name_of_iframe"))

>通过Frame Xpath:

webdriverwait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.XPATH,"xpath_of_iframe"))

>通过Frame CSS:

webdriverwait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.CSS_SELECTOR,"css_of_iframe"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐