目錄
前言
一般的窗口切換就是瀏覽器打開多個窗口,使用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
- switch_to.window,切換窗口,替換
- 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