一.switch_to簡介
首先展示一個代碼
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.get("https://tieba.baidu.com/")
driver.back()
driver.forward()
driver.find_element_by_css_selector("a[title = '娛樂明星']").click()
driver.close()
在這個之中,當我們使用關閉函數close()的時候程序會把百度的首頁關閉,而不是之後打開的娛樂頁。
這裏就需要swith_to包裏系列函數來切換。
二.switch函數用法簡介:
1.切換tab(句柄handle)
- 獲取瀏覽器當前所在頁籤的句柄:
current_window_handle()
- 獲取所有頁面窗口的句柄
driver.window_handles()
類型字符串<class ‘str’>
CDwindow-A89A78F7DC78910E558496ECB939EB82
獲取的是全部窗口的句柄,類型<class ‘list’>
['CDwindow-A89E8A6898FCC59B15CB2EAE392EA644', 'CDwindow-5E725DF47772C2D7B7F5C7F357486EC2']
另外,源碼中又是熟悉的Command語句以及execute
切換之後要確認是否切換成功
可以通過判斷title確認是否切換成功,具體依照實際場景
這裏以實際代碼展示。
driver = webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
mydriver = WebDriver(driver)
mydriver.click(("css","a[title = '娛樂明星']"))
res_all = driver.window_handles
print("所有頁籤handle:{}".format(res_all))
title_first_page = driver.title
print("切換前title {}" .format(title_first_page))
# 將頁面handle轉到娛樂頁
driver.switch_to.window(res_all[1])
# 獲取當前頁面的title(切換handle後)
title_next_page = driver.title
print("切換後title{}".format( title_next_page))
driver.quit()
這裏之前看到switch_to_window這個方法是無法使用的有刪除線,就替換成switch_to.window()
切換窗口的等待設置
待補充
2.切換iframe
切換到iframe中,查看源碼說明可以通過索引或者element(元素定位),或者framename切換
driver.switch_to.frame()
element = driver.find_element_by_css_selector("#result > iframe")
driver.switch_to.frame(element)
driver.switch_to.frame(1)
切換到主界面html
driver.switch_to.default_content()
多級嵌套,切換到父級的iframe
driver.switch_to.parent_frame()
等待
#等待新的iframe可用再切換
EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, 'iframe'))
3.切換彈窗
定位到alert彈窗,返回一個彈窗的對象
a = driver.switch_to.alert()
使用彈窗的方法
# 獲取彈窗內的文本
a.text
# 對彈窗對象的確定操作。返回原來的頁面
a.accept()
# 對彈窗對象的取消操作。返回原來的頁面
a.dismiss()
4.cookies處理
# 添加 cookie
driver.add_cookie({'name':"yuze"})
# 獲取
driver.get_cookie('name')