有时候网页是有框架frame存在,就会导致自动化模块无法定位到指定的元素。今天学习selenium的框架处理。
单层的frame需要先切换到对应的frame中,利用switch_to.frame()进行切换,括号里为所需切换
的frame的id、name、index等。下面举个例子
<html>
<head>
<title></title>
</head>
<body>
<iframe src="left.html" id="frame1" name="leftframe"></frame>
<iframe src="right.html" id="frame2" name="rightframe"></frame>
</body>
</html>
那么切换frame代码如下
from selenium import webdriver
driver=webdriver.firefox()
通过id定位
driver.switch_to.frame("frame1")
通过name定位
driver.switch_to.frame("leftframe")
通过索引定位
driver.switch_to.frame(0)
以上是单层框架的定位方式。有时候还会碰到多层框架嵌套的情况
<html>
<head>
<title></title>
</head>
<body>
<iframe id="frame1" >
<iframe id="frame2"/>
</frame>
</body>
</html>
像上述的frame多层嵌套,则需要逐层切换
先通过id切换到frame1
driver.switch_to.frame('frame1')
再通过id切换到frame2
driver.switch_to.frame("frame2")
当切换到frame2进行操作后,如果需要返回到frame1,则可使用
driver.switch_to.parent_frame()
返回到上一层frame中,类似于回退效果,当上一层是主文档时则无效
至于括号里是哪一个frame,直接搜索对应的框架属性即可