Selenium WebDriver 完全指南 (2025 最新版)
WebDriver 是 Selenium 的核心 ,用于直接控制真实浏览器 ,实现自动化操作。 本文聚焦 Selenium 4+ WebDriver ,以 Python 为例,兼顾 Java/JavaScript。
一、WebDriver 是什么?
名称 说明 Selenium WebDriver 现代 Selenium 核心 API,遵循 W3C 标准协议 替代旧版 取代了 Selenium RC(已废弃) 工作原理 Python 代码 → WebDriver 协议 → 浏览器驱动 → 真实浏览器
Python Code
↓
WebDriver API (W3C Protocol)
↓
ChromeDriver / GeckoDriver
↓
Chrome / Firefox 浏览器
二、WebDriver 架构图
+------------------+ HTTP/JSON +-------------------+
| Python Script | -------------> | ChromeDriver |
| (selenium.webdriver) | (localhost:port) |
+------------------+ +-------------------+
↑ ↓
| 浏览器进程
+-------------------------------------+
三、支持的浏览器 & 驱动
浏览器 驱动名称 自动管理工具 Chrome chromedriverwebdriver-managerFirefox geckodriverwebdriver-managerEdge msedgedriverwebdriver-managerSafari 系统内置 无需下载(macOS)
四、Python 快速开始(推荐)
1. 安装
pip install selenium webdriver-manager
2. 基础代码模板
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 自动下载并启动 Chrome
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
try:
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Selenium WebDriver")
driver.find_element(By.ID, "su").click()
print("页面标题:", driver.title)
finally:
driver.quit() # 必须关闭
五、WebDriver 核心 API(常用方法)
分类 方法 说明 浏览器控制 get(url)打开网页 title获取标题 current_url当前 URL page_sourceHTML 源码 quit() / close()关闭浏览器 back() / forward() / refresh()导航 元素定位 find_element(By.ID, "id")查找单个元素 find_elements()查找多个 支持 8 种定位:ID, NAME, CLASS, TAG, LINK, PARTIAL_LINK, XPATH, CSS 元素操作 send_keys("text")输入文本 click()点击 clear()清空输入框 text获取文本 get_attribute("href")获取属性 is_displayed() / is_enabled()状态判断
六、By 定位方式(推荐 CSS / XPath)
from selenium.webdriver.common.by import By
# 推荐写法
driver.find_element(By.ID, "kw")
driver.find_element(By.NAME, "wd")
driver.find_element(By.CLASS_NAME, "s_ipt")
driver.find_element(By.TAG_NAME, "input")
# 高级定位
driver.find_element(By.LINK_TEXT, "新闻")
driver.find_element(By.PARTIAL_LINK_TEXT, "新")
# 最常用
driver.find_element(By.CSS_SELECTOR, "#kw")
driver.find_element(By.XPATH, "//input[@name='wd']")
七、等待机制(重点! )
1. 隐式等待(全局)
driver.implicitly_wait(10) # 最多等10秒找元素
2. 显式等待(推荐 )
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
# 等待元素可见
element = wait.until(EC.visibility_of_element_located((By.ID, "result")))
# 等待可点击
button = wait.until(EC.element_to_be_clickable((By.ID, "su")))
八、Options 配置(浏览器行为)
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--start-maximized") # 最大化
options.add_argument("--incognito") # 无痕模式
options.add_argument("--disable-notifications") # 禁用通知
options.add_argument("--headless") # 无头模式
options.add_argument("--user-agent=CustomBot") # 自定义 UA
driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))
九、Selenium 4 新特性
特性 示例 相对定位 driver.find_element(with_tag_name("p").above(element))新窗口 driver.switch_to.new_window('tab')截取元素截图 element.screenshot("btn.png")CDP 访问 driver.execute_cdp_cmd("Network.enable", {})
# 相对定位示例
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import with_tag_name
btn = driver.find_element(By.ID, "submit")
label = driver.find_element(with_tag_name("label").to_left_of(btn))
十、多浏览器支持
# Chrome
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# Firefox
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
# Edge
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
十一、Java 示例(简要)
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Test {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
System.out.println(driver.getTitle());
driver.quit();
}
}
十二、常见问题
问题 解决方案 WebDriverException: session not created驱动与浏览器版本不匹配 → 用 webdriver-manager 元素找不到 使用 WebDriverWait + 正确定位 卡住无响应 增加超时、检查网络、避免 headless 内存不足
十三、推荐最佳实践
# 1. 使用 webdriver-manager
# 2. 显式等待
# 3. 封装 Page Object
# 4. 添加日志和截图
# 5. 使用 context manager(可选)
from contextlib import contextmanager
@contextmanager
def webdriver_context():
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
try:
yield driver
finally:
driver.quit()
# 使用
with webdriver_context() as driver:
driver.get("https://httpbin.org")
十四、学习资源
类型 链接 官方文档 https://www.selenium.dev/documentation/webdriver/ Python API https://selenium-python.readthedocs.io/ W3C 协议 https://w3c.github.io/webdriver/
十五、一句话总结
WebDriver = 程序员的“浏览器遥控器” ,让你用代码控制 Chrome、Firefox 等真实浏览器。
下一步 : 想看 完整登录 + 翻页 + 保存数据 的 WebDriver 项目模板? 回复 project 我立刻发你一个 可运行的爬虫项目 !
当前支持版本 :Selenium 4.25+(2025 年 10 月)