Selenium4+Python3系列(五)

2022-10-30 21:00:45

寫在前面

感覺到很慚愧呀,因為居然在Selenium+Java系列中沒有寫過多視窗處理及控制程式碼切換的文章,不過也無妨,不管什麼語言,其思路是一樣的,下面我們來演示,使用python語言來實現視窗控制程式碼的切換。

什麼是視窗控制程式碼

可能有的同學會問了,到底啥是視窗,什麼又是多視窗,控制程式碼到底是啥玩楞?

那麼,他到底長啥樣?如下圖所示:

怎麼處理多視窗控制程式碼

如何獲取視窗控制程式碼

語法:

driver.current_window_handle

1、模擬場景

開啟搜狗首頁,輸入淘寶進入久曲健 部落格園,並輸出頁面標題

2、使用具柄判斷切換

就是通過視窗控制程式碼判斷切換,範例程式碼入下:

for window_handle in window_handles:
    if window_handle != old_Window:
        driver.switch_to.window(window_handle)
        print(driver.title)
    else:
        driver.close()

3、使用URL判斷切換

就是根據跳轉的當前URL切換,範例程式碼如下:

for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        print(driver.title)
    else:
        driver.close()

4、通過下標切換

window_handles = driver.window_handles返回的是一個集合,所以自然用下標去切換,簡單點說就是,只要找到想要切換的視窗下標即可實現切換,多個視窗不建議使用此方法。

範例程式碼如下:

driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title)

5、關閉新視窗控制程式碼,切回原來主頁

筆者反覆試驗發現,用控制程式碼刪除不好用,還是這個url靠譜,範例程式碼如下:

for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        driver.close()
    else:
        print(driver.title)

所有彙總程式碼如下:

# -*- coding: utf-8 -*-
"""
@Time : 2022/10/26 14:12
@Auth : 軟體測試君
@File :switch_window.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)
多視窗處理之控制程式碼切換

"""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

'''
初始化操作
'''
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))


def init():
    # 最大化操作
    driver.maximize_window()
    driver.set_script_timeout(60)
    # 智慧等待找到元素後立即繼續執行,全域性生效
    driver.implicitly_wait(60)
    driver.set_page_load_timeout(60)


init()

driver.get("https://www.sogou.com/")
driver.find_element(By.ID, "query").clear()
driver.find_element(By.ID, "query").send_keys("久曲健 部落格園")
driver.find_element(By.ID, "stb").click()
time.sleep(2)
# 獲取當前頁面視窗控制程式碼(每個控制程式碼的表示都是唯一的)
old_Window = driver.current_window_handle
print('當前視窗控制程式碼為:{0}'.format(old_Window))
driver.find_element(By.LINK_TEXT, "久曲健 - 部落格園").click()
time.sleep(2)
window_handles = driver.window_handles
print(window_handles)
'''
### 方法一:
for window_handle in window_handles:
    if window_handle != old_Window:
        driver.switch_to.window(window_handle)
        print(driver.title)
    else:
        driver.close()

'''
'''
### 方法二:
driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title)

'''
'''
### 方法三:
for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        print(driver.title)
    else:
        driver.close()
'''

# 關閉新視窗控制程式碼,切回原來主頁
for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        driver.close()
    else:
        print(driver.title)

driver.quit()

寫在最後

最近心情還是很不好,恐慌的不是單身可怕,而是年紀越來越大,也不知道現在的女孩都在想什麼,好想結婚呀!

感興趣的同學,請自己去嘗試,關於Selenium4.0+Python3系列教學,未完待續····