“此浏览器不支持框架。”

2024-07-08 08:16:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: nonamesrc框架idhtmlframewin
1条回答
网友
1楼 · 发布于 2024-07-08 08:16:15

如果我正确理解你的问题,你就不会有任何错误。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")

将切换到左侧框架(第一条语句确保您处于“主”窗口开始)。或

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

切换到右帧

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

相关问题 更多 >

    热门问题