1. 程式人生 > >python3 + selenium 多frame(框架)切換

python3 + selenium 多frame(框架)切換

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()#登入

參考連結

更多參考資料

參考連結