如何使用Selenium WebDriver和Python在框架集内导航子框架?

时间:2015-05-25 11:26:33

标签: python selenium

hmtl页面的布局如下:

<frameset framespacing="0" border="false" frameborder="0" rows="11%,8%,*">
    <frame name="ENTETE" src="fr_entete.htm" scrolling="no" noresize="" marginwidth="0" marginheight="0">Some elements...</frame>
    <frameset framespacing="0" border="false" frameborder="0" cols="35%,7%,*">
        <frame name="SOMMAIRE" src="fr_sommaire.htm" scrolling="no" noresize="" marginwidth="0" marginheight="0">Some elements...</frame>
        <frame name="OUTIL" src="fr_outil.htm" scrolling="no" noresize="" marginwidth="2" marginheight="0">Some elements...</frame>
        <frame name="LIBRE" src="fr_libre.asp" scrolling="no" noresize="" marginwidth="2" marginheight="0">Some elements...</frame>
    </frameset>
    <frame name="TRAVAIL" src="cdc_rechgen.asp" scrolling="yes" noresize="" marginwidth="5" marginheight="0" frameborder="0">Some elements...</frame>
</frameset>

我需要访问框架&#34; SOMMAIRE&#34;。 这个框架是框架集的子框架,框架集又是框架集的子框架。 我成功导航到框架&#34; TRAVAIL&#34;和&#34; ENTETE&#34;直接,但我无法成功导航框架&#34; SOMMAIRE&#34; ...

我试过了:

driver.switch_to_default_content()
driver.switch_to.frame("ENTETE")
driver.switch_to.frame("SOMMAIRE")

但我总是有以下例外:

selenium.common.exceptions.NoSuchFrameException: Message: no such frame

我也读了这些链接,但没有一个能帮我做我想做的事......

Link1 Link2 Link3

非常感谢。

3 个答案:

答案 0 :(得分:2)

SOMMAIRE框架不在ENTETE框架内(并且,根据HTML片段 - 它实际上不在任何框架内)。这意味着您无需先切换到ENTETE。只需直接切换到SOMMAIRE

即可
driver.switch_to_default_content()  # in case you were inside an iframe before
driver.switch_to.frame("SOMMAIRE")

答案 1 :(得分:0)

尝试使用XPATH导航到SOMMAIRE

driver.switchTo().frame(driver.findElement(By.xpath("xpath_of_SOMMARIE")));

答案 2 :(得分:0)

用户neha bedi似乎在正确的轨道上,但需要编辑回复:尝试

driver.switch_to.frame(driver.find_element_by_xpath('xpath_of_SOMMARIE')) 

这对我有用。