从“驱动地狱”到一行代码:WebDriverManager使用手记(附模板)

小编最近被问得最多的问题就是:"为什么我的Selenium脚本突然就跑不起来了?那个chromedriver到底该怎么配啊?"

别急,今天小编就带大家认识一个神器------WebDriverManager ,让你彻底告别驱动版本不匹配的噩梦,而且 10分钟就能学会

吐槽大会

我们写的自动化脚本,昨天还能正常运行,今天上班运行就报错了:

vbnet 复制代码
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

或者:

makefile 复制代码
SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version XX

原因很简单------你的 Chrome 浏览器又双叒叕自动升级了,而你的 chromedriver 还是老版本的。

以前我们的解决方案是:去官网找对应版本 → 下载 → 解压 → 放到指定目录 → 配置环境变量 → 重启IDE → ......

为此小编自己还写了一个下载 chromedriver 的软件

教程在这里👉 mp.weixin.qq.com/s/s1BG1ev9T...

累不累?烦不烦?

今天小编告诉你:这些破事,一行代码就能解决。

什么是 WebDriverManager?

WebDriverManager 是一个自动化管理浏览器驱动(chromedriver、geckodriver、edgedriver等)的库。它会自动:

  1. 检测你当前电脑上安装的浏览器版本
  2. 从官方源下载与之匹配的驱动
  3. 自动配置好路径
  4. 直接让 Selenium 用上正确的驱动

全程你只需要写一行安装代码,其他全部自动完成。 而且支持 Chrome、Firefox、Edge、Opera 等主流浏览器。

1、安装 WebDriverManager

这里小编以 Python 为例(Java 的用法也会简单提一下,别急)。

打开你的终端(cmd / PowerShell / Terminal),输入:

复制代码
pip install webdriver-manager

看到 Successfully installed 就说明装好了

💡 小编提示:建议使用 Python 3.12 以上版本

2、使用教程

我们以:自动打开百度,搜索"大飞记Python",为例

python 复制代码
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
​
# 创建 Service 对象,自动下载并指定 chromedriver 路径
service = Service(ChromeDriverManager().install())
​
# 启动浏览器
driver = webdriver.Chrome(service=service)
​
# 打开百度
driver.get("https://www.baidu.com")
​
# 输入'大飞记Python',点击搜索
driver.find_element(By.ID, "chat-textarea").send_keys("大飞记Python")
driver.find_element(By.ID, "chat-submit-button").click()
​
# 等待3秒
time.sleep(3)
​
# 关闭浏览器
driver.quit()

注意:第一次运行时会有点慢(要下载驱动、初始化环境等),之后再运行直接从缓存里读取,就快了

以后我们再运行脚本,WebDriverManager会先从缓存中查找是否有匹配的版本,当本地没有匹配的驱动时,会自动联网下载对应匹配的版本。再也不需要我们手动去操作了👍

同时WebDriverManager也支持 FireFox、Edge、Opera、甚至IE浏览器😂

3、指定版本

3.1、指定驱动版本(不推荐新手尝试,但可以了解)

ini 复制代码
ChromeDriverManager(driver_version="114.0.5735.90").install()

3.2、离线模式(网络不好的时候用)

设置环境变量 WDM_OFFLINE=1,脚本就会只读取本地缓存,不再联网检查更新。

3.3、在 Java 中使用(给隔壁 Java 朋友看一眼)

typescript 复制代码
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
​
public class Test {
    public static void main(String[] args) {
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");
        driver.quit();
    }
}

Maven 依赖:

xml 复制代码
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.9.2</version>
</dependency>

WebDriverManager 的优势

传统方式 WebDriverManager 方式
手动下载驱动 ✅ 自动下载
手动比对浏览器版本 ✅ 自动匹配
配置环境变量 / 指定路径 ✅ 一行代码自动设置
浏览器一升级就报错 ✅ 下次运行自动更新驱动
团队协作时每人要配一遍 ✅ 代码一致,缓存共享

一句话:省下来的时间,你可以多刷几条抖音

"傻瓜式"代码模板

以后我们编写任何 Selenium 脚本时,直接复制这段开头就行啦~

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
​
# 自动处理驱动
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
​
# 打开网址等自动化逻辑
driver.get("自己的URL")
​
# 更多你的代码 ...
​
driver.quit()

如果你用的是 Selenium 4.6 及以上版本 ,其实官方已经内置了类似功能(Selenium Manager),连 webdriver-manager 库都不用装,直接使用webdriver.Chrome() 就能自动处理。但小编实测下来,稳定性不如WebDriverManager,胜在足够简单,小伙伴们按照自己的需求选择吧~

最后,小编的一点私心

如果这篇文章对你有帮助,欢迎点赞、在看、转发 三连呀~

相关推荐
Cloud_Shy6181 小时前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第九章 Excel 自动化 上篇)
python·数据分析·excel·numpy·pandas
子午1 小时前
基于YOLO的玫瑰叶片检测系统~Python+深度学习+人工智能+目标检测+YOLOV8算法
人工智能·python·yolo
Hesionberger1 小时前
LeetCode 101:对称二叉树(多语言解法)
开发语言·python
小陈的进阶之路1 小时前
Python系列课(11)——PySpark
开发语言·python·ajax
WL_Aurora1 小时前
备战蓝桥杯国赛【Day 12】
python·蓝桥杯
Cloud_Shy6181 小时前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第八章 使用读写包操作 Excel 文件 下篇)
python·数据分析·excel·numpy·pandas
tryCbest2 小时前
Flask vs FastAPI 全方位对比与实战
python·flask·fastapi
测试员周周2 小时前
【Appium 系列】第04节-Page Object 模式 — BasePage 基类设计
开发语言·数据库·人工智能·python·语言模型·appium·web app
无限中终2 小时前
如何抓取某音视频的互动数据
爬虫·python