从“驱动地狱”到一行代码: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,胜在足够简单,小伙伴们按照自己的需求选择吧~

最后,小编的一点私心

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

相关推荐
lifloveyou35 分钟前
table接口结构
python
Warson_L2 小时前
class 扩展
python
前端与小赵3 小时前
Python 数据结构陷阱与复数运算优化:列表、元组、字典成员操作辨析及 NumPy 高效实践
python
天天进步20153 小时前
Python全栈项目--基于深度学习的视频目标跟踪系统
python·深度学习·音视频
天天进步20154 小时前
Python全栈项目--Python自动化运维工具开发
运维·python·自动化
(●—●)橘子……4 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
爱吃羊的老虎4 小时前
【JAVA】python转java:Spring Boot 入门
java·spring boot·python
小桥流水---人工智能5 小时前
【已解决】ImportError: cannot import name ‘AdamW‘ from ‘transformers.optimization‘
python
芝麻开门GEO5 小时前
泰安GEO优化服务,真的能提升效果吗?
人工智能·python
颜酱5 小时前
选读:工业级调用 LangChain:从 Demo 到企业级应用
python