Selenium WebDriver

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)  |
+------------------+                   +-------------------+
         ↑                                     ↓
         |                               浏览器进程
         +-------------------------------------+

三、支持的浏览器 & 驱动

浏览器驱动名称自动管理工具
Chromechromedriverwebdriver-manager
Firefoxgeckodriverwebdriver-manager
Edgemsedgedriverwebdriver-manager
Safari系统内置无需下载(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 APIhttps://selenium-python.readthedocs.io/
W3C 协议https://w3c.github.io/webdriver/

十五、一句话总结

WebDriver = 程序员的“浏览器遥控器”,让你用代码控制 Chrome、Firefox 等真实浏览器。


下一步
想看 完整登录 + 翻页 + 保存数据 的 WebDriver 项目模板?
回复 project 我立刻发你一个 可运行的爬虫项目


当前支持版本:Selenium 4.25+(2025 年 10 月)

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注