我正在使用Python+Selenium与带有frameset和frames的网页进行交互。在
但是,当我做类似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>
<body bgcolor="#FFFFFF">
This browser does not support frames.
</body>
</noframes>
</frameset>
我的selenium版本是2.53.2。我试过用Firefox和Chrome驱动程序2.21。在
如果我没弄错你的问题,你就不会出错了。
driver.page_source
显示的是页面的实际HTML。在您的例子中,页面包含2个框架,以及名为<noframes>
的附加部分,如果他们的浏览器不支持框架,最终用户会看到这个部分。所以你看到的不是针对你的错误。在为了实现自动化,我建议您忽略整个
<noframes>
部分。只有非常旧的浏览器(例如IE 2)不支持框架(请参阅有关框架的详细说明here)。在现在如果我理解正确的话,你的问题是你不能选择任何元素,因为你的元素是在框架中。嗯,Selenium提供了一整套处理框架的函数。有关Python上的Selenium,请参见this。在
所以在选择任何其他元素之前,您需要选择并切换到相应的帧。例如:
将切换到左侧框架(第一个语句确保您首先在“main”窗口上)。或者
^{pr2}$切换到正确的帧。在
所有其他的HTML元素都在这些框架中,所以您可以使用普通xpath、css和其他选择器来选择它们。在
相关问题 更多 >
编程相关推荐