python + selenium + chrome 如何打開新窗口,並實現窗口切換

python + selenium + chrome 如何打開新窗口,並實現窗口切換

1. 背景

  • 在使用selenium時,經常會有打開一個新的窗口的需求,下面會提供幾種窗口切換的思路。

2. 環境

  • python 3.6.1
  • 系統:win7
  • IDE:pycharm
  • 安裝過chrome瀏覽器
  • 配置好chromedriver
  • selenium 3.7.0

3. 代碼:打開窗口並實現窗口切換

這裏寫圖片描述

  • 源代碼如下:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

browser = webdriver.Chrome()
browser.set_window_size(900, 900)   # 根據桌面分辨率來定

# 打開淘寶頁面
browser.get("https://www.taobao.com/")

# 獲取淘寶頁面的 title和handle信息
taobaoWindowHandle = browser.current_window_handle
taobaoTitle = browser.title
print(f"1. taobaoTitle = {taobaoTitle}, taobaoWindowHandle = {taobaoWindowHandle}")

# 打開路由器配置頁面 http://172.16.0.1
js = 'window.open("http://172.16.0.1");'
browser.execute_script(js)
time.sleep(2)
# 如果沒有switch做窗口切換的話,即使有打開新的窗口,瀏覽器還是會focus在原來的窗口
print(f"2. routing Configure Page had been opened, currentTitle = {browser.title}, currentHandle = {browser.current_window_handle}")

# 拿到所有的窗口
allHandles = browser.window_handles
print(f"3. allHandles = {allHandles}")

# 第一種思路:按照handle,從淘寶窗口切換到路由器配置窗口
routeWindowHandle = 0
routeTitle = 'None'
for handle in allHandles:
    if handle != browser.current_window_handle:
        browser.switch_to_window(handle)
        routeWindowHandle = browser.current_window_handle
        routeTitle = browser.title
        break
print(f"4. switch to routeWindow, routeWindowHandle = {routeWindowHandle}, routeTitle = {routeTitle}, currentHandle = {browser.current_window_handle}, currentTitle = {browser.title}")

# 第二種思路:當然還有一種方法是根據窗口的title進行切換
# 從路由器配置窗口,切換回淘寶窗口
for handle in allHandles:
    if browser.title.find("淘寶網") == -1:
        browser.switch_to_window(handle)
print(f"5. switch to taobaoWindow, taobaoWindowHandle = {taobaoWindowHandle}, taobaoTitle = {taobaoTitle}, currentHandle = {browser.current_window_handle}, currentTitle = {browser.title}")

time.sleep(30)
# 第三種思路:按照windowHandle切換,切換到taobao窗口
browser.switch_to_window(taobaoWindowHandle)
print(f"6. switch back to taobao window, currentHandle = {browser.current_window_handle}, taobaoWindowHandle = {taobaoWindowHandle}, routeWindowHandle = {routeWindowHandle}")

time.sleep(10)
browser.quit()

  • 打印信息:
1. taobaoTitle = 淘寶網 - 淘!我喜歡, taobaoWindowHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F)
2. routing Configure Page had been opened, currentTitle = 淘寶網 - 淘!我喜歡, currentHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F)
3. allHandles = ['CDwindow-(554828D35C91C3EE5F7F65E644C62E9F)', 'CDwindow-(AD029E3FACA3A3A61640770E7FC36F81)']
4. switch to routeWindow, routeWindowHandle = CDwindow-(AD029E3FACA3A3A61640770E7FC36F81), routeTitle = 登錄, currentHandle = CDwindow-(AD029E3FACA3A3A61640770E7FC36F81), currentTitle = 登錄
5. switch to taobaoWindow, taobaoWindowHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F), taobaoTitle = 淘寶網 - 淘!我喜歡, currentHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F), currentTitle = 淘寶網 - 淘!我喜歡
6. switch back to taobao window, currentHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F), taobaoWindowHandle = CDwindow-(554828D35C91C3EE5F7F65E644C62E9F), routeWindowHandle = CDwindow-(AD029E3FACA3A3A61640770E7FC36F81)
發佈了73 篇原創文章 · 獲贊 244 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章