浏览器不支持框架异常

时间:2016-05-25 03:03:05

标签: python selenium selenium-chromedriver selenium-firefoxdriver

我正在使用Python + Selenium与具有框架集和框架的网页进行交互。

但是,当我做print driver.page_source时,我会收到此错误:

<frameset cols="*" border="0" framespacing="0" rows="118,*" frameborder="0" onbeforeunload="unload()">
    <frame src="/xxx/frameset/xxx.html" name="ENTETE_WIN" id="ENTETE_WIN" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" />
    <frame src="/xxx/frameset/bodyFrame.html" name="BODY_WIN" id="BODY_WIN" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" />
    <noframes>
        &lt;body bgcolor="#FFFFFF"&gt;
        This browser does not support frames.
        &lt;/body&gt;
  </noframes>
</frameset>

我的硒版本是2.53.2。我尝试使用带有驱动程序2.21的Firefox和Chrome。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你就不会收到任何错误。 driver.page_source显示的是页面的实际HTML。在您的情况下,页面包含2个框架,以及名为<noframes>的附加部分,如果他们的浏览器不支持框架,最终用户将看到该部分。所以你看到的不是针对你的错误。

我建议你自动化,忽略整个<noframes>部分。只有非常老的浏览器(例如IE 2)不支持帧(请参阅帧here的详细说明)。

现在如果我理解正确,你的麻烦就是你不能选择任何元素,因为你的元素是框架。好吧,Selenium提供了一整套处理帧的功能。有关Python的Selenium,请参阅this

因此,在选择任何其他元素之前,您需要选择并切换到相应的帧。例如:

driver.switch_to_default_content()
driver.switch_to_frame("ENTETE_WIN")

将您切换到左侧框架(第一个语句确保您在#34; main&#34;窗口开始)。或

driver.switch_to_default_content()
driver.switch_to_frame("BODY_WIN")

切换到右边框架。

所有其他HTML元素都在这些框架内,因此您可以使用普通的xpath,css和其他选择器来选择它们。