Selenium之窗口切換


前言

一般的窗口切換就是瀏覽器打開多個窗口,使用selenium在多個窗口中相互切換。除此之外,還會遇到iframe窗口,這種相當於大盒子中嵌套小盒子,對於這種窗口切換,重點就是進入某個盒子,退出某個盒子。知道當前在哪個盒子中,就好搞操作了。

窗口切換

重點:

  • driver.switch_to系列,切換窗口,包括三個常用的方法:
    • switch_to.window,切換窗口,替換switch_to_window
    • switch_to.frame,進入iframe,替換switch_to_frame
    • switch_to.default_content,退出iframe,替換原方法switch_to_default_content
  • window_handles,窗口數組

根據這兩個方法組合,就達到切換窗口的目的了。我們來演示一個,從百度入口輸入關鍵字並且點擊某個結果(因為點擊某個鏈接,會在新的窗口中打開),然后再切換回來。
代碼如下:

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait  # 等待頁面加載某些元素
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 獲取driver
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

try:
    # 發請求
    driver.get('https://www.baidu.com')

    # 定位標簽並輸入值然后點擊
    driver.find_element_by_id('kw').send_keys('聽雨危樓-cnblogs')
    time.sleep(1)
    driver.find_element_by_id('su').click()

    # 在新窗口中,點擊結果標簽
    wait.until(EC.presence_of_element_located((By.LINK_TEXT, '聽雨危樓 - 博客園'))).click()
    # driver.find_element_by_link_text('聽雨危樓').click()

    # 所有打開的窗口都存在這個數組中
    # print(driver.window_handles)  # ['CDwindow-922052E58B50E4A32401C904D478CC8E', 'CDwindow-AC58D7837A577C8878BE283F554B0E52', 'CDwindow-8196C4B6F2DEAAD7F0AF10DA17BC44ED']
    
    # 根據數組下標索引切換窗口
    time.sleep(3)
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(3)
    driver.switch_to.window(driver.window_handles[0])
    time.sleep(2)
    driver.switch_to.window(driver.window_handles[2])

finally:
    # 關閉瀏覽器
    time.sleep(3)
    driver.quit()
    # 截止2019-6-11,代碼無誤

效果如下:

iframe窗口切換

iframe記住兩個方法:

  • switch_to.frame(iframe),進入窗口
  • switch_to.default_content(),退出窗口

我們完成一個使用selenium自動發163郵件的程序。
see also:https://www.cnblogs.com/Neeo/articles/11003789.html
效果如下:


歡迎斧正,that's all


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM