"This browser does not support frames."

"This browser does not support frames."

我正在使用 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>

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

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

为了实现自动化,我建议您忽略整个 <noframes> 部分。只有非常非常旧的浏览器(例如 IE 2)不支持框架(参见框架的详细解释 here)。

现在,如果我理解正确的话,你的问题是你不能 select 任何元素,因为你的元素在框架中。好吧,Selenium 提供了整套函数来处理帧。请参阅 this 上关于 Python 的 Selenium。

所以在 selecting 任何其他元素之前,您需要 select 并切换到相应的框架。例如:

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

会将您切换到左侧框架(第一个语句确保您首先在 "main" window 上)。或者

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

切换到右框架。

所有其他 HTML 元素都在这些框架内,因此您可以 select 使用普通 xpath、css 和其他 select 或