【问题标题】:"This browser does not support frames."“此浏览器不支持框架。”
【发布时间】:2016-09-22 11:09:17
【问题描述】:

我正在使用 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。我尝试使用带有驱动程序 2.21 的 Firefox 和 Chrome。

【问题讨论】:

  • 您使用的是什么浏览器,版本等,请提供更多详细信息。
  • @MichaelMarkidis 抱歉,我正在编辑我的问题,但它被意外发布了。

标签: python selenium selenium-chromedriver selenium-firefoxdriver


【解决方案1】:

如果我正确理解了您的问题,您就不会遇到任何错误。 driver.page_source 向您展示的是页面的实际 HTML。在您的情况下,该页面包含 2 个框架,以及名为 &lt;noframes&gt; 的附加部分,如果他们的浏览器不支持框架,最终用户会看到这些部分。所以你看到的并不是针对你的错误。

我建议您自动化,忽略整个 &lt;noframes&gt; 部分。只有非常非常旧的浏览器(例如 IE 2)不支持框架(请参阅框架 here 的详细说明)。

现在,如果我理解正确,您的问题是您无法选择任何元素,因为您的元素在框架中。好吧,Selenium 提供了一整套处理帧的函数。有关 Python 上的 Selenium,请参阅 this

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

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

会将您切换到左侧框架(第一个语句确保您在“主”窗口开始)。或者

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

切换到正确的框架。

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

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 2016-09-06
    • 2016-08-16
    • 2016-09-26
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多