news 2026/10/1 5:42:51

Selenium配置chromedriver全指南:版本匹配与避坑详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Selenium配置chromedriver全指南:版本匹配与避坑详解

做个自动化测试,或者想用脚本批量操作浏览器的时候,Selenium基本是绕不开的工具。但绝大多数人第一次接触Selenium,最容易被卡住的不是Selenium本身,而是webDriver。尤其是浏览器选的Chrome,那就必须装对应的chromedriver。我见过太多同事和读者在这个环节栽跟头,一折腾就是一下午,原因无非就是版本对不上、驱动不知道放哪、代码里报错看不懂。这篇就把Selenium安装webDriver(chromedriver版)的完整流程、版本匹配原理和避坑经验一次性讲清楚,适合正在入门自动化测试、准备用Chrome跑Selenium脚本的读者。

1. 先搞清楚Selenium、webDriver、chromedriver之间的关系

1.1 Selenium只是发号施令的客户端

很多人有个根深蒂固的误区:Selenium装上之后就能直接操作浏览器。实际上Selenium只是把“打开网页”“点击按钮”“输入文本”这些动作,按照webDriver协议打包成标准请求,发给一个独立的驱动进程。真正去和浏览器打交道的是这个驱动进程,它接收Selenium发来的指令,再翻译成浏览器自己能理解的自动化接口调用。

打个比方:Selenium是远程指挥中心,webDriver是现场翻译官,浏览器是执行任务的工人。指挥中心不懂工人的方言,所以翻译官的价值就是把标准指令转成工人听得懂的本地话。翻译官用的协议版本如果和工人掌握的方言对不上,工人就听不懂,任务自然就卡住了。

这里还有一个很容易被忽略的点:webDriver本身是一个可执行文件,不是Python包。所以你在pip里装selenium库,并不等于装了webDriver。Chrome要用的驱动叫chromedriver.exe(Windows)或chromedriver(Mac/Linux),这是一个独立下载、独立配置的程序,不装它,Selenium就会报“WebDriverException: unknown error: cannot find chromedriver”之类的错误。

1.2 为什么Chrome浏览器要选chromedriver

webDriver协议是一个通用标准,但不同浏览器对协议的具体实现不完全一样,所以每个主流浏览器几乎都有自己的专属driver。

  • Chrome对应chromedriver
  • Firefox对应geckodriver
  • Edge对应msedgedriver
  • Safari对应safaridriver

如果你的日常浏览器是Chrome,那就必须用chromedriver。这也解释了为什么网上搜“Selenium安装webDriver”,90%的结果都是chromedriver版。Chrome的市场占有率高,教程资料全,出了问题也更容易搜到解决方案。

顺带说一句,不要动“拿Edge驱动去驱动Chrome”的念头。虽然它们都是Chromium内核,看起来很像,但driver和浏览器之间是有身份校验的,跨浏览器强行驱动大概率启动失败,白白浪费时间。选driver的逻辑就一句话:浏览器用什么,driver就装对应的那个。

2. 动手之前先把Python环境装好,Selenium库装好

2.1 检查Python版本和pip是否就绪

打开命令行窗口,Windows用CMD或PowerShell,Mac/Linux用终端,输入:

python --version

看到Python 3.x的版本号,说明环境没问题。如果提示“不是内部或外部命令”或者“command not found”,说明Python没安装,或者安装的时候没有把Python加入PATH环境变量。python.org官网下载的安装包,在安装向导第一页有一个“Add Python to PATH”的复选框,新手经常忽略这个,导致后面pip和python命令都用不了。这个勾选一定要打上。

然后再验证pip:

pip --version

pip是Python的包管理工具,装Selenium库全靠它。如果提示找不到pip,可以试试:

python -m pip install --upgrade pip

这里要多说一句,Selenium 4版本要求Python 3.7以上,所以还在用Python 2.x的话就赶紧升级吧,Python 2已经是很久以前的事了,新项目没必要考虑它。

2.2 安装Selenium库

环境确认没问题后,安装Selenium本身非常简单:

pip install selenium

如果网络状况一般,可以指定国内常用的公共软件源来加速:

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

装完之后确认一下版本:

pip show selenium

能看到版本信息就说明装好了。如果你的项目里有requirements.txt这种依赖管理文件,也可以在文件里加一行selenium==4.15.0(版本号按实际需求写),然后:

pip install -r requirements.txt

这里有个细节:不要盲目追最新版本。Selenium 4之后的API比3.x变化不小,网上很多旧教程用的是3.x的写法,照抄会报错。安装时指定一个稳定版本,后面排查问题会轻松很多。如果安装过程中途断掉,导致包不完整,不要反复重试安装,先卸载再装:

pip uninstall selenium pip install selenium

3. 最关键的一步:chromedriver版本匹配与下载

3.1 版本不匹配为什么会报错

90%的chromedriver问题都出在版本不匹配上。如果你下载的driver和Chrome版本差距太大,启动时大概率会看到这个经典报错:

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 120.0.6099.224 with binary path ...

报错信息说得已经很直白:driver只支持Chrome 114,但你本机的浏览器是120。根本原因是浏览器和driver之间没有保证永远兼容的接口契约,新版本浏览器改了某个命令、某些参数,老driver调用的接口可能就被移除了,浏览器自然不认。

所以下载chromedriver之前,第一件事是确定你本机Chrome的真实版本号。网上有些教程会直接给你一个老版本的driver链接,比如2.37.544315这种,那是配合好几年前的老Chrome用的,现在装上去基本废了。

3.2 查看Chrome版本号的三种方法

第一种最直观:打开Chrome浏览器,点击右上角三个点,选择“帮助”,再点“关于Google Chrome”,页面里会直接显示类似“120.0.6099.224”的版本号。

第二种:在Chrome地址栏直接输入:

chrome://version

回车,第一行就是完整的版本号。这个方法不用点菜单,个人觉得最方便。

第三种适合命令行场景。Windows PowerShell里执行:

(Get-Item "C:\Program Files\Google\Chrome\Application\chrome.exe").VersionInfo.ProductVersion

Mac终端里执行:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --version

把版本号里的主版本号记住就行。比如版本号是120.0.6099.224,主版本号就是120。

3.3 从官方渠道下载对应版本的chromedriver

现在Google官方推荐的下载入口是Chrome for Testing网站:

https://googlechromelabs.github.io/chrome-for-testing/

这个页面列出了所有可用于测试的Chrome制品,包括chromedriver,按自己的系统和版本选择即可。还有一个历史版本入口:

https://chromedriver.chromium.org/downloads

上面有更早的历史版本列表,适合特殊场景取用。下载时注意三件事:

第一,版本号必须和Chrome主版本一致。Chrome 120就找120开头的driver,Chrome 114就找114开头的driver。如果找不到完全一样的小版本,优先选同一个主版本里日期最新的,基本都能用。

第二,平台要选对。Windows选win32或win64,Mac要根据芯片选mac-arm64(M1/M2等)或mac-x64,Linux选linux64。选错了会出现“无法启动程序”之类的错误。

第三,下载下来是一个压缩包,里面通常只有一个可执行文件。Windows下叫chromedriver.exe,Mac/Linux下叫chromedriver,没有后缀。别把它当成普通的Python包去pip安装,它就是一个独立的执行文件,直接解压出来备用就行。

4. 配置chromedriver的四种方式,按需选择

4.1 方式一:直接放进Python的Scripts目录

如果你不想折腾环境变量,最省事的做法是把chromedriver.exe复制到Python安装目录下的Scripts文件夹里。在Windows上通常是:

C:\Python312\Scripts

这个目录通常在Python安装时已经加入PATH了,Selenium启动时会自动在这个目录里找driver。操作步骤很简单:找到Python安装路径,进入Scripts目录,把解压出来的chromedriver.exe复制进去,然后新开一个命令行窗口输入:

chromedriver --version

能看到版本号,说明路径已经生效。

这个方式适合个人开发机、快速体验,缺点是换Python版本、换机器的时候就要重新复制一次,而且把driver和Python目录混在一起,目录会越来越乱。

4.2 方式二:统一放到drivers目录并配置PATH

我更推荐单独建一个专门放driver的目录,比如在C盘根目录建一个C:\webdrivers,把所有浏览器的driver都扔进去,然后把这个目录加进系统环境变量PATH。以后不管哪个项目要用,Selenium都能自己在PATH里找到driver。

Windows配置PATH的流程:右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到Path → 编辑 → 新建 → 填C:\webdrivers→ 确定。改完之后一定要重新打开命令行窗口,因为环境变量只在新的进程里才会生效。

Mac/Linux是在Shell配置文件(~/.zshrc或~/.bashrc)里加一行:

export PATH=$PATH:/Users/你的用户名/webdrivers

然后执行:

source ~/.zshrc

我自己的电脑就是这种布局。好处是路径清晰、多个项目共用一套driver,以后不管写脚本还是调试都心里有数。如果你要管理多台机器,建议都用同一个目录名,减少配置差异。

4.3 方式三:代码里用绝对路径指定

如果不想动环境变量,也可以在启动Selenium时直接指定driver路径。这里要注意,Selenium 4的写法已经变了,老教程里的executable_path参数已经不建议使用,现在推荐用Service对象:

from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service(r'D:\webdrivers\chromedriver.exe') driver = webdriver.Chrome(service=service)

注意我用了原始字符串前缀r,这是为了不让Windows路径里的反斜杠触发转义。如果你用的是Mac/Linux路径,直接写普通字符串就行。

这个方式适合本地快速测试,但是有个明显问题:driver的路径被写死在代码里了。多人协作的时候,不同人机器上的路径不一样,代码一到别人那里就跑不起来。所以这种方式定位为“临时应急”,不适合正式项目。

4.4 方式四:用webdriver-manager自动匹配版本

近两年我新项目的本地开发环境,基本都换成webdriver-manager了。这个工具能在运行时自动检测本机Chrome版本,然后下载对应的driver,省去手动升级和匹配的麻烦。

安装:

pip install webdriver-manager

使用:

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到缓存目录,之后启动就快了。这个方案特别省心,尤其适合Chrome悄悄自动升级之后继续跑脚本的场景。但有一个前提条件:运行环境必须能访问外网,否则自动下载会失败。内网服务器或者CI环境不能用这个方案,那种情况老老实实用方式二手动放置driver更可靠。

5. 跑一个最小脚本验证安装是否真的成功

5.1 十行代码验证全链路

配置完成后,新建一个test_driver.py文件,写下面这段代码:

from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") print(driver.title) driver.quit()

运行:

python test_driver.py

如果一切正常,你会看到Chrome窗口自动打开,访问百度首页,控制台打印出“百度一下,你就知道”,最后窗口自动关闭。这一步跑通,说明Selenium、chromedriver、Chrome三者之间的链路已经畅通,接下来就能开始写真正的自动化脚本了。

如果你用的是方式三的绝对路径写法,脚本要改成带Service对象的形式。如果你用的是方式四的webdriver-manager,就加上那两行import。总之启动driver那行会根据配置方式略有不同,但“打开页面 → 获取标题 → 退出浏览器”这个骨架是通用的,都建议保留。

5.2 进阶验证:无头模式看安装结果

有些环境没有图形界面,比如服务器、云主机,或者你不想每次测试都弹出一个浏览器窗口,这时候可以用无头模式:

from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) driver.get("https://www.baidu.com") print(driver.title) driver.quit()

无头模式只是不显示窗口,页面照常加载,Selenium照样能取元素、点击、输入,非常适合跑回归测试和批量任务。

driver跑通之后,很多人下一个任务就会碰到页面元素枚举。比如想把页面上所有按钮、输入框、链接的定位方式整理出来,用find_elements(By.TAG_NAME, "div")这类方法遍历就行。这里提醒一个典型场景:页面上那种自定义下拉框,不是原生<select>,而是<div><ul><li>组合做的,直接用Selenium的Select类会识别不了。正确做法是先点击展开,再遍历<li>的文本做匹配,然后执行点击。这些技能属于安装成功之后马上就能用上的内容,建议边学边练。

6. 安装和配置过程中的常见问题与排查技巧

6.1 高频报错速查表

报错现象根本原因解决方案
SessionNotCreatedException: This version of ChromeDriver only supports Chrome version xxchromedriver和Chrome版本不匹配重新下载与Chrome主版本一致的driver
WebDriverException: unknown error: cannot find Chrome binarySelenium找不到Chrome安装路径用Options的binary_location参数指定Chrome可执行文件路径
ModuleNotFoundError: No module named 'selenium'Selenium库没有安装或装到了别的Python环境确认当前python和pip对应,重新pip install selenium
WebDriverException: unknown error: cannot find chromedriverdriver没放入PATH,或代码没指定路径把driver目录加入PATH,或用Service指定路径
Permission denied 或 无法执行二进制文件Mac/Linux下driver没有执行权限执行chmod +x chromedriver赋予执行权限
双击chromedriver.exe闪退正常现象,driver本来就不是靠双击运行的命令行输入chromedriver --version验证
下载解压后文件只有几KB下载不完整或压缩包损坏重新下载,检查解压后文件大小和可执行权限

6.2 几个容易被忽略的细节

第一,Selenium 4.6以上版本内置了Selenium Manager,会自动尝试查找和下载driver。很多人发现“我没下载driver也能跑起来”就是这个功能在起作用。但它不是万能的,内网环境、没有写权限的目录、个别网络环境下依然会失败,所以手动管理driver仍然是必须掌握的看家本领。

第二,Chrome默认会后台自动更新。你今天用的driver是好的,可能下周Chrome自己升级了,driver就突然报版本不匹配。这个问题没有办法完全消灭,要么锁死Chrome版本,要么用webdriver-manager让driver跟着自动更新。个人建议是开发环境用webdriver-manager,部署环境锁版本,两者结合最省心。

第三,历史上有些项目的配置文件里会出现chromedriver=2.37.544315这种写法,看起来像driver配置,实则可能是历史遗留的路径或版本变量。现在更规范的做法是把driver路径集中放到环境变量里,比如WEBDRIVER_PATH,代码里读取它,这样就不会把路径到处写死。

第四,如果系统PATH里存在多个版本的chromedriver,Selenium会按PATH顺序找第一个。这会导致“我明明更新了driver,为什么启动的还是老版本”的诡异现象。建议定期清理旧driver,别让历史文件躺在角落里捣乱。

我在实际配置过程中最大的体会是:chromedriver这个环节本身不复杂,难的是版本匹配和路径查找这些细节。只要你养成了“先查Chrome版本,再下对应driver,最后用最小脚本验证”的习惯,这个步骤基本不会再出问题。以上这些报错场景和排查方法,都是我自己和身边同事踩过坑之后总结出来的,你照着排查,能省下大量时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 5:42:50

Claude记忆打通Cowork与GPT-5.6登陆Kiro:AI开发工具更新实操指南

1. 这期早报里真正值得动手折腾的三件事8月26日这波更新&#xff0c;我刷到标题的第一反应是"又是堆料的一天"&#xff0c;但仔细把三条消息拆开看&#xff0c;会发现它们其实指向三个完全不同的动手方向&#xff1a;Claude 把记忆能力打通到 Cowork 协作场景、GPT-5…

作者头像 李华
网站建设 2026/10/1 5:42:50

多卡训练遇CUDA error 802?从驱动到PCIe的排查与修复全攻略

多卡机器上跑训练跑得好好的&#xff0c;某天突然一个CUDA error: 802拍在脸上&#xff0c;很多人的第一反应是代码写错了。其实 802 这个错误码&#xff08;CUDA_ERROR_SYSTEM_NOT_READY&#xff09;和代码的关系往往不大&#xff0c;它说的是 CUDA 运行时的底层依赖——驱动、…

作者头像 李华
网站建设 2026/10/1 5:42:48

Codex插件市场汉化全攻略:CLI、IDE、Web端一站式设置

Codex 插件市场默认全是英文&#xff0c;第一次打开的时候满屏的 Plugin、Marketplace、Install、Dependency&#xff0c;看着确实有点头疼。我最早也以为得找个汉化补丁&#xff0c;后来折腾了几轮才明白&#xff0c;这事儿根本没那么麻烦——关键是要搞清楚你用的到底是哪个入…

作者头像 李华
网站建设 2026/10/1 5:41:58

Windows 10 上搭建 EMQX + MQTTX 本地 MQTT 调试环境实战

1. 为什么要在 Windows 10 上搭这套 MQTT 环境做物联网或者智能家居相关开发的朋友&#xff0c;大概率绕不开 MQTT 这个协议。它轻量、省带宽、支持海量设备连接&#xff0c;几乎成了物联网通信的事实标准。而 EMQX 是目前用得最多的开源 MQTT Broker 之一&#xff0c;另一个 M…

作者头像 李华
网站建设 2026/10/1 5:41:19

扩散模型发展脉络全解析:从DDPM到潜在扩散的演进与实战

扩散模型这几年在生成式AI圈子里几乎是绕不开的话题。不管你是做图像生成的、搞视频合成的&#xff0c;还是研究分子结构预测的&#xff0c;大概率都撞见过“Diffusion”这个词。但很多人对它的理解停留在“知道有这么个东西”&#xff0c;真要问它从哪来的、为什么突然就火了、…

作者头像 李华
网站建设 2026/10/1 5:41:03

Hermes v0.10.0 Tool Gateway:智能体工具调用的统一网关层

1. 工具网关这个东西&#xff0c;为什么值得单独拆一层1.1 智能体开发里最常见的"工具调用地狱"先说一下我自己的经历。前几个月我在本地搭 Hermes 智能体&#xff0c;给 Agent 接了三个工具&#xff1a;一个是本地文件搜索&#xff0c;一个是天气查询的 HTTP 接口&a…

作者头像 李华