舊方法 : 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很有用