我正在尝试选择一个位于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"))
原文地址:https://codeday.me/bug/20190611/1216549.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。