selenium之 切換窗口、frame、alert

舊方法 :  switch_to_     

新方法 :  switch_to.

老方法:
不同窗口之間的切換(handle):
切換窗口的方法
current_window_handle                 獲取當前頁面窗口的句柄
window_handles                        獲取所有頁面窗口的句柄
switch_to_window(window_name)         將定位的頁面轉到指定的window_name頁面
                                      (window_name:指定頁面窗口的handle)
------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
sleep(1)
driver.maximize_window()
sleep(3)
driver.find_element_by_css_selector("a[title = '娛樂明星']").click() # 點擊title爲娛樂明星的<a>標籤元素
sleep(2)
all = driver.window_handles                                         # 獲取全部窗口的handle
print(all)
now_page = driver.current_window_handle                             # 獲取當前窗口的handle(貼吧首頁)
print(now_page)
title_first_page = driver.title                                     # 獲取當前頁面的title(當前title)
print(title_first_page)
driver.switch_to_window(all[1])                                     # 將頁面handle轉到娛樂明星頁面
title_next_page = driver.title                                      # 獲取當前頁面的title(切換handle後)
print(title_next_page)

------------------------------------------------------------
打印:
['CDwindow-BCA0B0104E3564B15620A9ABCE23D640', 'CDwindow-D6437B97CE2171D745BD097809C2F1C1']
CDwindow-BCA0B0104E3564B15620A9ABCE23D640
百度貼吧——全球最大的中文社區
C:/Users/Administrator/PycharmProjects/untitled/day1/test9.py:25: 
DeprecationWarning: use driver.switch_to.window instead
  driver.switch_to_window(all[1])
娛樂明星_百度貼吧
Process finished with exit code 0

 

老方法:
切換頁面frame:
關於頁面frame的方法
switch_to_frame(frame_reference)      通過id、name、element(定位的某個元素)、索引來切換到某個frame
switch_to_default_content()           切換到主頁面

注:driver.switch_to_frame(None) 等同於 driver.switch_to_default_content()
---------------------------------------------------------------------------

w3c網站的frame切換:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols")
driver.maximize_window()

#定位父類層級iframe
ele_framest = driver.find_element_by_css_selector('#result > iframe')

# 切換到父類層級iframe-通過元素切換
driver.switch_to_frame(ele_framest)
print(driver.page_source)
print("-----------------------------------------------")

#切換到第二個子類frame-通過索引切換
driver.switch_to_frame(1)
print(driver.page_source)
print("-----------------------------------------------")

#切換到最上層層級-等同於driver.switch_to_frame(None)
driver.switch_to_default_content()
print(driver.page_source)

 

老方法:
獲取瀏覽器彈窗alert、自定義彈窗以及其操作:
關於alert彈窗的方法:
switch_to_alert()            定位到alert彈窗,返回一個彈窗的對象
dismiss()                    對彈窗對象的取消操作(相當於點擊彈窗上的取消按鈕)
accept()                     對彈窗對象的確定操作(相當於點擊彈窗上的確定按鈕)
text                         對彈窗對象,獲取彈窗內的文本
send_keys(key)               對彈窗對象內的輸入框輸入數據(如果彈窗的格式有輸入框的話可以使用)
authenticate(name, pass)     對於身份認證彈窗,輸入用戶名和密碼並自動提交
--------------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=jseg_prompt")
driver.maximize_window()
driver.switch_to_frame("i")    # 通過frame的name值來定位
ele = driver.find_element_by_css_selector('body > input[type="button"]')
ele.click()                    # 點擊按鈕觸發彈窗
sleep(2)
a = driver.switch_to_alert()   # 定位到到彈窗
print(driver)
print(a.text)                  # 獲取彈窗的內容
a.dismiss()                    # 觸發取消按鈕
sleep(2)
ele.click()                    # 再次點擊按鈕觸發彈窗
a.send_keys("Jodie")           # 在彈窗中的輸入框輸入數據
sleep(2)
a.accept()                     # 觸發確認按鈕
切換窗口、frame、alert的新方法:
switch_to.

driver.switch_to.active_element()          
等同於    
driver.switch_to_active_element()          定位到當前聚焦的元素上

driver.switch_to.alert()                   
等同於    
driver.switch_to_alert()                   切換到alert彈窗

driver.switch_to.default_content()         
等同於    
driver.switch_to_default_content()         切換到最上層頁面

driver.switch_to.frame(frame_reference)    
等同於    
driver.switch_to_frame(frame_reference)    通過id、name、element(定位的某個元素)、索引來切換到某個frame

driver.switch_to.window(window_name)       
等同於   
driver.switch_to_window(window_name)       切換到制定的window_name頁面

driver.switch_to.parent_frame()                      
這是switch_to中獨有的方法,可以切換到上一層的frame,對於層層嵌套的frame很有用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章