【Python】Selenium之switch_to

一.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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章