
做个自动化测试或者想用脚本批量操作浏览器的时候Selenium基本是绕不开的工具。但绝大多数人第一次接触Selenium最容易被卡住的不是Selenium本身而是webDriver。尤其是浏览器选的Chrome那就必须装对应的chromedriver。我见过太多同事和读者在这个环节栽跟头一折腾就是一下午原因无非就是版本对不上、驱动不知道放哪、代码里报错看不懂。这篇就把Selenium安装webDriverchromedriver版的完整流程、版本匹配原理和避坑经验一次性讲清楚适合正在入门自动化测试、准备用Chrome跑Selenium脚本的读者。1. 先搞清楚Selenium、webDriver、chromedriver之间的关系1.1 Selenium只是发号施令的客户端很多人有个根深蒂固的误区Selenium装上之后就能直接操作浏览器。实际上Selenium只是把“打开网页”“点击按钮”“输入文本”这些动作按照webDriver协议打包成标准请求发给一个独立的驱动进程。真正去和浏览器打交道的是这个驱动进程它接收Selenium发来的指令再翻译成浏览器自己能理解的自动化接口调用。打个比方Selenium是远程指挥中心webDriver是现场翻译官浏览器是执行任务的工人。指挥中心不懂工人的方言所以翻译官的价值就是把标准指令转成工人听得懂的本地话。翻译官用的协议版本如果和工人掌握的方言对不上工人就听不懂任务自然就卡住了。这里还有一个很容易被忽略的点webDriver本身是一个可执行文件不是Python包。所以你在pip里装selenium库并不等于装了webDriver。Chrome要用的驱动叫chromedriver.exeWindows或chromedriverMac/Linux这是一个独立下载、独立配置的程序不装它Selenium就会报“WebDriverException: unknown error: cannot find chromedriver”之类的错误。1.2 为什么Chrome浏览器要选chromedriverwebDriver协议是一个通用标准但不同浏览器对协议的具体实现不完全一样所以每个主流浏览器几乎都有自己的专属driver。Chrome对应chromedriverFirefox对应geckodriverEdge对应msedgedriverSafari对应safaridriver如果你的日常浏览器是Chrome那就必须用chromedriver。这也解释了为什么网上搜“Selenium安装webDriver”90%的结果都是chromedriver版。Chrome的市场占有率高教程资料全出了问题也更容易搜到解决方案。顺带说一句不要动“拿Edge驱动去驱动Chrome”的念头。虽然它们都是Chromium内核看起来很像但driver和浏览器之间是有身份校验的跨浏览器强行驱动大概率启动失败白白浪费时间。选driver的逻辑就一句话浏览器用什么driver就装对应的那个。2. 动手之前先把Python环境装好Selenium库装好2.1 检查Python版本和pip是否就绪打开命令行窗口Windows用CMD或PowerShellMac/Linux用终端输入python --version看到Python 3.x的版本号说明环境没问题。如果提示“不是内部或外部命令”或者“command not found”说明Python没安装或者安装的时候没有把Python加入PATH环境变量。python.org官网下载的安装包在安装向导第一页有一个“Add Python to PATH”的复选框新手经常忽略这个导致后面pip和python命令都用不了。这个勾选一定要打上。然后再验证pippip --versionpip是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这种依赖管理文件也可以在文件里加一行selenium4.15.0版本号按实际需求写然后pip install -r requirements.txt这里有个细节不要盲目追最新版本。Selenium 4之后的API比3.x变化不小网上很多旧教程用的是3.x的写法照抄会报错。安装时指定一个稳定版本后面排查问题会轻松很多。如果安装过程中途断掉导致包不完整不要反复重试安装先卸载再装pip uninstall selenium pip install selenium3. 最关键的一步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.ProductVersionMac终端里执行/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开头的driverChrome 114就找114开头的driver。如果找不到完全一样的小版本优先选同一个主版本里日期最新的基本都能用。第二平台要选对。Windows选win32或win64Mac要根据芯片选mac-arm64M1/M2等或mac-x64Linux选linux64。选错了会出现“无法启动程序”之类的错误。第三下载下来是一个压缩包里面通常只有一个可执行文件。Windows下叫chromedriver.exeMac/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(rD:\webdrivers\chromedriver.exe) driver webdriver.Chrome(serviceservice)注意我用了原始字符串前缀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(serviceservice)第一次运行时会自动下载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(--headlessnew) driver webdriver.Chrome(optionsoptions) driver.get(https://www.baidu.com) print(driver.title) driver.quit()无头模式只是不显示窗口页面照常加载Selenium照样能取元素、点击、输入非常适合跑回归测试和批量任务。driver跑通之后很多人下一个任务就会碰到页面元素枚举。比如想把页面上所有按钮、输入框、链接的定位方式整理出来用find_elements(By.TAG_NAME, div)这类方法遍历就行。这里提醒一个典型场景页面上那种自定义下拉框不是原生select而是divulli组合做的直接用Selenium的Select类会识别不了。正确做法是先点击展开再遍历li的文本做匹配然后执行点击。这些技能属于安装成功之后马上就能用上的内容建议边学边练。6. 安装和配置过程中的常见问题与排查技巧6.1 高频报错速查表报错现象根本原因解决方案SessionNotCreatedException: This version of ChromeDriver only supports Chrome version xxchromedriver和Chrome版本不匹配重新下载与Chrome主版本一致的driverWebDriverException: unknown error: cannot find Chrome binarySelenium找不到Chrome安装路径用Options的binary_location参数指定Chrome可执行文件路径ModuleNotFoundError: No module named seleniumSelenium库没有安装或装到了别的Python环境确认当前python和pip对应重新pip install seleniumWebDriverException: 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部署环境锁版本两者结合最省心。第三历史上有些项目的配置文件里会出现chromedriver2.37.544315这种写法看起来像driver配置实则可能是历史遗留的路径或版本变量。现在更规范的做法是把driver路径集中放到环境变量里比如WEBDRIVER_PATH代码里读取它这样就不会把路径到处写死。第四如果系统PATH里存在多个版本的chromedriverSelenium会按PATH顺序找第一个。这会导致“我明明更新了driver为什么启动的还是老版本”的诡异现象。建议定期清理旧driver别让历史文件躺在角落里捣乱。我在实际配置过程中最大的体会是chromedriver这个环节本身不复杂难的是版本匹配和路径查找这些细节。只要你养成了“先查Chrome版本再下对应driver最后用最小脚本验证”的习惯这个步骤基本不会再出问题。以上这些报错场景和排查方法都是我自己和身边同事踩过坑之后总结出来的你照着排查能省下大量时间。