python3 + selenium 多iframe(框架)切换

html演示:

frame.html:

<html>  
<head>  
<meta http-equiv="content-type" content="text/html;charset=utf-8" />  
<title>frame</title>  
<script type="text/javascript"  
async=""src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js  
"></script>  
<link  
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra  
p-combined.min.css" rel="stylesheet" />  
<script type="text/javascript">$(document).ready(function(){});</scri>  
</head>  
<body>  
<div class="row-fluid">  
<div class="span10 well">  
<h3>frame</h3>  
<iframe id="f1" src="inner.html" width="800",  #<------框架在此处
height="600"></iframe>  
</div>  
</div>   
</body>  
<script  
src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.  
min.js"></script>  
</html>  

inner.html:

[html] view plain copy
<html>  
<head>  
<meta http-equiv="content-type" content="text/html;charset=utf-8" />  
<title>inner</title>  
</head>  
<body>  
<div class="row-fluid">  
<div class="span6 well">  
<h3>inner</h3>  
<iframe id="f2" src="http://www.baidu.com"  #<------框架在此处
width="700"height="500"></iframe>  
<a href="javascript:alert('watir-webdriver better thanselenium webdriver;')">click</a>  
</div>  
</div>  
</body>  
</html>  

说明

多层框架或窗口的定位: 
• switch_to_frame() #框架切换
• switch_to_window() #窗口切换

对于一个现代的web 应用,经常会出现框架(frame) 或窗口(window)的应用,
这也就给我们的定位带来了一个难题。有时候我们定位一个元素,定位器没有问题,但一直定位不了, 这时候就要首先检查这个元素是否在一个frame 中,seelnium webdriver 提供了一个switch_to_frame方法, 可以很轻松的来解决这个问题。

##iframe存在id:
跳转示例代码:

from selenium import webdriver  
import time  
import os  
browser = webdriver.Chrome()  
file_path = os.path.abspath('frame.html')  
print(file_path)
browser.get(file_path)  
browser.implicitly_wait(30)  
#进入到ifrome1(id = f1)的框架,利用其id寻找  
browser.switch_to_frame("f1")  
#再进入到ifrome2(id =f2)的框架,利用其id寻找  
browser.switch_to_frame("f2")  
#下面就可以正常的操作元素了  
browser.find_element_by_id("kw").send_keys("selenium")  
browser.find_element_by_id("su").click()  
time.sleep(3)  

##iframe没有id或name:

xf = driver.find_element_by_css_selector(".j_minilogin_iframe")#此网页iframe没有id和name故使用class元素赋值然后访问
driver.switch_to.frame(xf)#进入框架
#下面就可以进行常规操作了
driver.find_element_by_xpath("//*[@id='TPL_username_1']").send_keys("weibgg")#输入账户
driver.find_element_by_xpath("//*[@id='TPL_password_1']").send_keys("123")#输入密码
driver.find_element_by_xpath("//*[@id='J_SubmitStatic']").click()#登录

参考链接

跳出框架参考链接

更多参考资料

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值