目录
[1. 切换窗口](#1. 切换窗口)
[2. 设置窗口大小](#2. 设置窗口大小)
[3. 窗口切换(句柄复用)](#3. 窗口切换(句柄复用))
[1. 基础截图(固定文件名)](#1. 基础截图(固定文件名))
[2. 进阶截图(按时间戳命名,避免重复)](#2. 进阶截图(按时间戳命名,避免重复))
[窗口关闭方法(close() vs quit())](#窗口关闭方法(close() vs quit()))
[1. 打开网站](#1. 打开网站)
[2. 浏览器前进、后退、刷新](#2. 浏览器前进、后退、刷新)
[三类弹窗全解析(警告 / 确认 / 选择)](#三类弹窗全解析(警告 / 确认 / 选择))
[三类弹窗的 Python-Selenium 完整操作代码](#三类弹窗的 Python-Selenium 完整操作代码)
[操作步骤 + 代码示例](#操作步骤 + 代码示例)
[代码示例(以 Chrome 为例)](#代码示例(以 Chrome 为例))
窗口操作
在多标签页场景下,Selenium 默认只操作 "当前窗口",想要切换到新打开的标签页,得先掌握 ** 窗口句柄(window handle)** 的用法。
1. 切换窗口
每个窗口对应一个唯一的handle字符串,通过current_window_handle获取当前页面句柄,sindow_handles可以获取所有窗口的句柄列表,再通过循环切换到目标窗口:

2. 设置窗口大小
通过下列函数可以控制窗口的尺寸,支持 "最大化、最小化、自定义尺寸":
python
# 1. 窗口最大化
driver.maximize_window()
# 2. 窗口最小化
driver.minimize_window()
# 3. 窗口全屏(类似按F11进入全屏模式)
driver.fullscreen_window()
# 4. 手动设置窗口尺寸(宽1024px,高768px)
driver.set_window_size(1024, 768)
3. 窗口切换(句柄复用)
如果需要回到之前的窗口,同样可以通过句柄列表定位:

截图操作
自动化脚本部署在机器上运行时,报错后可通过截图记录错误场景,辅助定位问题。
1. 基础截图(固定文件名)
python
# 保存截图到指定路径(脚本所在目录下的images文件夹)
driver.save_screenshot('./images/image.png')
- 路径说明:
./images/表示脚本所在目录下的images文件夹(需提前创建);image.png是截图文件名。
2. 进阶截图(按时间戳命名,避免重复)
通过时间戳生成唯一文件名,每次截图都不会覆盖:
python
import datetime
# 生成包含时间戳的文件名(格式:autotest-年-月-日-时-分-秒.png)
filename = "autotest-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
# 保存到指定文件夹
driver.save_screenshot("./images/" + filename)
窗口关闭方法(close() vs quit())
Selenium 中关闭窗口 / 浏览器有两个核心方法,功能不同:
| 方法 | 功能说明 |
|---|---|
driver.close() |
关闭当前 driver 指向的标签页(仅关闭一个标签,浏览器进程可能仍在运行)。 |
driver.quit() |
关闭整个浏览器及所有标签页,同时终止 driver 进程(彻底退出)。 |
代码示例
python
# 打开新标签页(以百度图片为例)
driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(6)").click()
time.sleep(3)
# 关闭当前标签页(仅关闭百度图片标签)
driver.close()
time.sleep(3)
# 彻底关闭浏览器及所有标签
driver.quit()
注意事项
- 执行
driver.close()后,若还需操作其他标签页,需重新切换窗口句柄; - 脚本结束时,建议用
driver.quit()彻底退出,避免残留浏览器进程。
等待机制
代码执行速度通常快于页面渲染,需通过等待方法避免 "元素未加载就操作" 的报错。
一、强制等待(time.sleep())
-
语法 :
time.sleep(秒数) -
作用:固定等待指定秒数,无论页面是否加载完成
-
代码示例 :
pythonimport time # 等待3秒后再执行后续代码 time.sleep(3) -
优缺点 :
- ✅ 优点:使用简单,调试时方便
- ❌ 缺点:浪费时间、降低脚本效率(页面加载快也得等)
二、隐式等待(implicitly_wait())
-
语法 :
driver.implicitly_wait(秒数) -
作用:全局智能等待 ------ 在指定时间内不断尝试查找元素,找到则立即执行后续代码;超时未找到则报错
-
代码示例 :
python# 全局隐式等待5秒(对所有元素生效) driver.implicitly_wait(5) -
特点 :
- 作用域:整个脚本的所有元素(只要
driver对象未被quit(),就一直生效) - 智能性:无需重复写等待代码,自动适配元素加载速度
- 作用域:整个脚本的所有元素(只要
三、显示等待(WebDriverWait)
-
语法 :
WebDriverWait(driver, 超时秒数).until(条件) -
作用 :针对特定元素 / 条件的智能等待 ------ 在指定时间内,满足条件则执行后续代码;超时未满足则报错
-
依赖 :需导入
expected_conditions(常用简称EC) -
代码示例 :
pythonfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待2秒内,指定XPATH的元素变为不可见 wait = WebDriverWait(driver, 2) wait.until( EC.invisibility_of_element((By.XPATH, '//*[@id="2"]/div/div/div[3]/div[1]/div[1]/div')) ) -
常用条件(
EC类方法) :方法 说明 title_is(标题)检查页面标题是否等于预期值 title_contains(文本)检查页面标题是否包含指定文本 visibility_of_element_located(定位器)检查元素是否存在于 DOM 且可见 presence_of_element_located(定位器)检查元素是否存在于 DOM(无需可见) visibility_of(元素对象)检查已知存在的元素是否可见 alert_is_present()检查是否出现弹窗 -
优缺点 :
- ✅ 优点:灵活(可自定义等待条件)、精准(仅对指定元素 / 条件生效)
- ❌ 缺点:写法相对复杂
三种等待方法对比
| 等待类型 | 作用范围 | 智能性 | 适用场景 |
|---|---|---|---|
| 强制等待 | 局部 | ❌ 固定等待 | 临时调试、简单场景 |
| 隐式等待 | 全局 | ✅ 智能 | 通用场景(脚本中只需写一次) |
| 显示等待 | 局部(特定元素 / 条件) | ✅ 智能 + 灵活 | 复杂场景(需自定义条件) |
浏览器导航
1. 打开网站
通过driver.get()访问指定 URL:
python
# 打开目标网站(示例:tool.lu)
driver.get("https://tool.lu/")
2. 浏览器前进、后退、刷新
通过driver对象的内置方法实现导航操作:
python
# 后退到上一页(模拟浏览器"返回"按钮)
driver.back()
# 前进到下一页(模拟浏览器"前进"按钮)
driver.forward()
# 刷新当前页面(模拟浏览器"刷新"按钮)
driver.refresh()
弹窗处理
网页弹窗(Alert 类)无法用常规元素定位
三类弹窗全解析(警告 / 确认 / 选择)
| 弹窗类型 | 核心特点 | 操作选项 | 典型场景 |
|---|---|---|---|
| 警告弹窗(Alert) | 仅含 "确定" 按钮,无输入框 | 仅可点击 "确定" | 系统提示、操作结果告知 |
| 确认弹窗(Confirm) | 含 "确定 + 取消" 按钮,无输入框 | 点击 "确定"/"取消" | 危险操作二次确认(如删除、退出) |
| 选择弹窗(Prompt) | 含 "确定 + 取消" 按钮 + 输入框 | 输入文本 + 点击 "确定" / 直接点击 "取消" | 需要用户输入内容后确认(如输入昵称、备注) |
选择弹窗(Prompt)核心问题
- 相比警告 / 确认弹窗,多了「输入文本」的步骤,若跳过输入直接确认,输入框会提交空值;
- 同样存在 "阻塞页面" 问题,未处理弹窗时无法操作页面其他元素。
三类弹窗的 Python-Selenium 完整操作代码
python
# ========== 1. 处理警告弹窗(Alert) ==========
# 切换到弹窗上下文
alert = driver.switch_to.alert
# 获取弹窗文本(可选)
print("警告弹窗内容:", alert.text)
# 点击"确定"关闭弹窗
alert.accept()
# ========== 2. 处理确认弹窗(Confirm) ==========
confirm_alert = driver.switch_to.alert
print("确认弹窗内容:", confirm_alert.text)
# 选择1:点击"确定"
confirm_alert.accept()
# 选择2:点击"取消"(注释掉上面的accept,启用下面的dismiss)
# confirm_alert.dismiss()
# ========== 3. 处理选择弹窗(Prompt) ==========
prompt_alert = driver.switch_to.alert
print("选择弹窗内容:", prompt_alert.text)
# 步骤1:向输入框输入内容(核心区别)
prompt_alert.send_keys("我是输入的内容")
# 步骤2:点击"确定"提交输入内容
prompt_alert.accept()
# 若想取消输入:注释上面两行,启用下面的dismiss
# prompt_alert.dismiss()
注意事项
- 操作弹窗前必须执行
driver.switch_to.alert切换上下文,否则会报错; - 弹窗处理完成后,上下文自动切回页面,无需手动切换;
- 若页面无弹窗时执行
switch_to.alert,会抛出NoAlertPresentException异常,建议加异常捕获:
python
from selenium.common.exceptions import NoAlertPresentException
try:
alert = driver.switch_to.alert
alert.accept()
except NoAlertPresentException:
print("当前页面无弹窗")
- 警告弹窗:仅
accept(); - 确认弹窗:
accept()/dismiss()二选一; - 选择弹窗:先
send_keys()输入内容,再accept()(或直接dismiss()取消); - 所有弹窗均需先切换上下文,处理后自动切回页面。
文件上传
核心问题
Selenium 无法识别系统自带的文件选择弹窗 (属于非 web 控件),但可以通过send_keys()直接传入文件路径实现上传。
操作步骤 + 代码示例
python
from selenium.webdriver.common.by import By
# 1. 访问包含文件上传控件的页面(示例为本地HTML文件)
driver.get("file:///D:/file/selenium4html/selenium-html/upload.html")
# 2. 定位文件上传的<input type="file">元素
upload_ele = driver.find_element(By.CSS_SELECTOR, "body > div > div > input[type=file]")
# 3. 直接传入本地文件的完整路径(实现上传)
upload_ele.send_keys("D:\\file\\test.txt")
关键说明
- 必须定位到页面中
type="file"的<input>元素(这是 web 控件,可被 Selenium 识别); send_keys()的参数是本地文件的完整路径 + 文件名 (Windows 路径需用\\转义,或用原始字符串r"D:\file\test.txt");- 此方法无需点击 "选择文件" 按钮、无需操作系统弹窗,直接完成上传。
浏览器参数设置:定制化启动行为
无头模式设置(无界面运行浏览器)
作用
在不需要可视化界面的场景(如服务器运行、批量自动化),启动浏览器时不显示窗口,节省资源并提升效率。
代码示例(以 Chrome 为例)
python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 1. 创建Chrome选项对象
options = webdriver.ChromeOptions()
# 2. 添加无头模式参数
options.add_argument("--headless")
# 3. 启动Chrome浏览器(带无头模式)
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
页面加载策略(控制页面加载等待逻辑)
作用
通过设置加载策略,调整 Selenium 等待页面加载的规则,适配不同场景的效率需求。
三种加载策略说明
| 策略值 | 说明 |
|---|---|
normal |
默认值,等待页面所有资源(DOM、图片、样式等) 完全下载完成 |
eager |
仅等待DOM 结构加载完成,图像、样式等资源可后续加载(提升执行速度) |
none |
不等待页面加载,直接执行后续代码(完全不阻塞 WebDriver) |
代码示例(设置加载策略)
python
options = webdriver.ChromeOptions()
# 设置加载策略为"eager"(仅等待DOM加载)
options.page_load_strategy = "eager"
# 启动浏览器(应用加载策略)
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
结语
以上就是 Selenium 自动化测试中窗口、等待、导航、弹窗、文件上传、参数设置的核心操作,这些都是日常自动化脚本的 "基础骨架"------ 掌握这些,就能应对大部分常见的页面交互场景啦~
