使用场景:
在浏览器当中,如果在页面进行了某个操作,结果浏览器打开了另外一个新窗口(tab)。
如果要操作新窗口当中的,页面元素,就需要窗口切换。
从一个html当中,切换到了另外一个html
所有窗口句柄(列表) wins =driver.window_handles
句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
新窗口:列表的最后一个!
driver.switch_to.window(wins[-1]) #列表最后一个是最新的窗口
# ========== 浏览器打开了另外一个新窗口 ===========
# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 取最新打开的窗口
print("当前所有的窗口句柄:", wins)
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
# # # ========== 浏览器打开了另外一个新窗口 2===========
# 获取当前的窗口句柄
wins = driver.window_handles
# === 打开新的窗口 ===
driver.find_element(By.XPATH, '//div[@id="1"]//a').click()
# # 要传一个句柄列表。等待新窗口出现.
wait.until(EC.new_window_is_opened(wins))
# # # 取最新打开的窗口
new_wins = driver.window_handles
print("当前所有的窗口句柄:", new_wins)
# # 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 开启与浏览器的会话--百度
driver = webdriver.Chrome()
driver.maximize_window() #窗口最大化
driver.get("http://www.baidu.com")
# 1、找到输入框元素。
user_input = (By.XPATH,"//input[@id='kw']")
ele = driver.find_element(*user_input)
# 输入操作
ele.clear()
ele.send_keys("selenium webdriver")
# 2、找到百度一下,然后点击。
driver.find_element_by_id("su").click()
# === 当前页面有所改变,有新的东西加载进来了。
wait = WebDriverWait(driver,30)
# wait.until(条件) 等待页面元素加载成功
first_search_result_loc = (By.XPATH, '//div[@id="1"]//a')
wait.until(EC.visibility_of_element_located(first_search_result_loc))
# 获取当前的窗口句柄
wins = driver.window_handles
print("当前所有的窗口句柄:", wins)
sleep(1)
# 3、在搜索结果当中,选择第一条搜索记录,点击进去。=== 打开新的窗口 ===
driver.find_element(By.XPATH, '//div[@id="1"]//a').click()
sleep(1)
# ========== 浏览器打开了另外一个新窗口 ===========
# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 取最新打开的窗口
print("当前所有的窗口句柄:", wins)
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
# # # ========== 浏览器打开了另外一个新窗口 2===========
# # 要传一个句柄列表。等待新窗口出现.
# wait.until(EC.new_window_is_opened(wins))
# # # 取最新打开的窗口
# new_wins = driver.window_handles
# print("当前所有的窗口句柄:", new_wins)
# # 切换到最新打开的窗口
# driver.switch_to.window(wins[-1])
# ============= 切换到了另外一个html页面当中,从另外一个html当中找元素 ===============
support_loc = (By.XPATH, '//span[text()="赞赏支持"]/parent::button')
wait.until(EC.element_to_be_clickable(support_loc))
driver.find_element(*support_loc).click()
# 结束与浏览器的会话
sleep(15)
driver.quit()