Skip to content

建立 2026-09-15 更新 2026-09-15

視窗、分頁與警示對話框

這一頁整理三種常見的進階情境:捲動頁面以觸發懶載入或操作視窗外的元素、處理多個視窗或分頁,以及應對瀏覽器原生的警示對話框。

捲動頁面

捲動頁面是很常見的操作,特別是當頁面採用懶加載(lazy load),或要操作的元素目前不在可視範圍內時。Selenium 沒有內建捲動方法,但可以透過 execute_script 執行 JavaScript 來完成。

捲動到頁面底部

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

捲動到特定元素

element = driver.find_element(By.ID, "element_id")
driver.execute_script("arguments[0].scrollIntoView();", element)

arguments[0] 指的是 execute_script 傳給 JavaScript 的第一個參數,也就是後面補上的 element

捲動特定距離

# 垂直捲動 1000 像素
driver.execute_script("window.scrollBy(0, 1000);")

處理多個視窗或分頁

現代網頁經常會開啟新視窗或新分頁。每個視窗/分頁在 Selenium 中都有一個唯一的句柄(handle),可以用來切換操作對象。

取得所有視窗的句柄

# 取得目前所有視窗的句柄
handles = driver.window_handles

切換到新視窗或分頁

# 記住目前(主)視窗的句柄
main_window = driver.current_window_handle

# 打開新視窗/分頁後,切換過去(通常是句柄列表的最後一個)
new_window = driver.window_handles[-1]
driver.switch_to.window(new_window)

關閉視窗並切回主視窗

# 關閉目前視窗
driver.close()

# 切換回主視窗
driver.switch_to.window(main_window)

處理警示對話框

alertconfirmprompt 是瀏覽器原生的彈出視窗,不屬於頁面 DOM 的一部分,因此無法用 find_element 找到,必須改用 driver.switch_to.alert

接受或取消

alert = driver.switch_to.alert
alert.accept()   # 點擊「確定」

alert = driver.switch_to.alert
alert.dismiss()  # 點擊「取消」

讀取對話框文字

alert = driver.switch_to.alert
alert_text = alert.text
print(alert_text)

在 prompt 對話框中輸入文字

alert = driver.switch_to.alert
alert.send_keys("Your input text")
alert.accept()

綜合範例

以下範例整合了捲動、切換視窗與處理警示對話框:

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()

這些進階操作能幫助你處理更複雜的網頁場景,讓自動化腳本更穩定、更貼近真實使用情境。

相關資料

想加速開發流程,可以進一步了解可以錄製操作的輔助工具