視窗、分頁與警示對話框
這一頁整理三種常見的進階情境:捲動頁面以觸發懶載入或操作視窗外的元素、處理多個視窗或分頁,以及應對瀏覽器原生的警示對話框。
捲動頁面
捲動頁面是很常見的操作,特別是當頁面採用懶加載(lazy load),或要操作的元素目前不在可視範圍內時。Selenium 沒有內建捲動方法,但可以透過 execute_script 執行 JavaScript 來完成。
捲動到頁面底部
捲動到特定元素
element = driver.find_element(By.ID, "element_id")
driver.execute_script("arguments[0].scrollIntoView();", element)
arguments[0] 指的是 execute_script 傳給 JavaScript 的第一個參數,也就是後面補上的 element。
捲動特定距離
處理多個視窗或分頁
現代網頁經常會開啟新視窗或新分頁。每個視窗/分頁在 Selenium 中都有一個唯一的句柄(handle),可以用來切換操作對象。
取得所有視窗的句柄
切換到新視窗或分頁
# 記住目前(主)視窗的句柄
main_window = driver.current_window_handle
# 打開新視窗/分頁後,切換過去(通常是句柄列表的最後一個)
new_window = driver.window_handles[-1]
driver.switch_to.window(new_window)
關閉視窗並切回主視窗
處理警示對話框
alert、confirm、prompt 是瀏覽器原生的彈出視窗,不屬於頁面 DOM 的一部分,因此無法用 find_element 找到,必須改用 driver.switch_to.alert。
接受或取消
alert = driver.switch_to.alert
alert.accept() # 點擊「確定」
alert = driver.switch_to.alert
alert.dismiss() # 點擊「取消」
讀取對話框文字
在 prompt 對話框中輸入文字
綜合範例
以下範例整合了捲動、切換視窗與處理警示對話框:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# 捲動到頁面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 點擊會開新視窗的連結
driver.find_element(By.LINK_TEXT, "Open new window").click()
# 切換到新視窗
new_window = driver.window_handles[-1]
driver.switch_to.window(new_window)
# 在新視窗中操作
driver.find_element(By.ID, "button_in_new_window").click()
# 處理彈出的警示對話框
alert = driver.switch_to.alert
print(alert.text)
alert.accept()
# 關閉新視窗,切回主視窗
driver.close()
driver.switch_to.window(driver.window_handles[0])
driver.quit()
這些進階操作能幫助你處理更複雜的網頁場景,讓自動化腳本更穩定、更貼近真實使用情境。
相關資料
想加速開發流程,可以進一步了解可以錄製操作的輔助工具。