Python Selenium Webdriver - 导航嵌套框架组
我正在制作一个有嵌套框架的页面,但无法访问一个子框架。下面是HTML源代码的大致结构:
<html>
<head></head>
<frameset id="0">
<frame name="name">
<frameset cols="10%,20%" id="01">
<frame name="mid1">
<frame name="mid2" scrolling="auto" src="chkclineversion.asp" marginwidth="0" marginheight="0">
</frameset>
<frame name="bot">
</frameset>
</html>
我需要访问一个名为“mid2”的框架。这个框架是在一个框架集里面,而这个框架集又是在主框架集里面。
我尝试了以下代码,但它们都没有用:
driver.switch_to_frame("mid2") #direct reference to nested frame name
driver.switch_to_frame(1)
driver.switch_to_frame("mid2") #switch to subframe by index and then attempt to reference "mid2". This gives me a no such frame exception1
我是不是漏掉了什么明显的东西?
我查看了这个链接,但它没有解答我的问题。
谢谢
2 个回答
2
这个 <frame>
标签的名字是 mid2,它好像被嵌套在两个额外的 <frame>
层里面。
要访问这个名字为 mid2 的 <frame>
,你需要:
- 安全地忽略外层的 parent 和 child
<frameset>
标签。 - 等待第一个层级的
<frame>
可用,然后切换到它。 - 等待第二个层级的
<frame>
可用,然后切换到它。 - 等待你想要的
<frame>
可用,然后切换到它。 你可以使用以下解决方案:
代码块:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name"))) WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='mid1']"))) WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='mid2' and starts-with(@src, 'chkclineversion')]")))
注意:你需要添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
你可以在这个链接找到相关讨论:如何通过 Selenium 使用 Webdriver 和 C# 定位并点击嵌套在多个 frame 和 frameset 中的元素
结束语
4
试试这个:
driver.switch_to_frame("name")
driver.switch_to_frame("mid2")
你遇到的问题是,JavaScript只能处理它当前能看到的框架。mid2
在一个子框架里,如果你在文档的最上面,它是看不到这个子框架的。