Jenkins运行Selenium测试时ChromeDriver与Chrome版本不匹配报错求助
问题根因说明
- 你的初始判断完全颠倒了错误逻辑:报错信息
This version of ChromeDriver only supports Chrome version 95 Current browser version is 93.0.4577.63的含义是当前调用的ChromeDriver是95版本,要求配套的Chrome浏览器大版本必须为95,但你服务器上安装的Chrome浏览器只有93/94版本,并不是你以为的ChromeDriver版本太低。 - Jenkins和SSH登录返回的版本不一致,是因为两者运行时的环境变量
PATH优先级不同:Jenkins执行任务使用的用户(通常是jenkins用户)的PATH路径下,存在一个95版本的ChromeDriver,优先级高于你修改的/usr/bin路径下的驱动;而你SSH登录使用的用户PATH优先读取/usr/bin下的93版本驱动,才会出现版本不一致的情况。 - 绝对不能将ChromeDriver重命名为google-chrome:前者是Chrome的驱动程序,后者是Chrome浏览器本身的二进制文件,二者功能完全不同,重命名会导致所有Chrome相关调用全部异常。
解决步骤
- 首先确认服务器上Chrome浏览器的正式版本,执行命令:
/usr/bin/google-chrome --version
记录返回的大版本号(比如返回94.x.x.x,大版本就是94)。 - 下载和浏览器大版本完全匹配的ChromeDriver,不要使用未发布稳定版的测试版本驱动。
- 在Jenkins流水线中新增临时执行步骤,运行如下命令确认Jenkins实际调用的ChromeDriver路径:
which chromedriver chromedriver --version
将对应路径下的ChromeDriver替换为你下载的和浏览器版本匹配的驱动文件即可。
4. 也可以直接在Selenium初始化代码中显式指定ChromeDriver的绝对路径,彻底规避环境变量优先级导致的驱动调用异常,修改代码如下:
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') # 显式指定驱动路径 driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', chrome_options=chrome_options)
长期规避方案
可以使用webdriver-manager工具自动管理驱动版本,无需手动下载匹配版本,它会自动识别当前安装的Chrome浏览器版本,自动下载对应匹配的ChromeDriver,使用方式如下:
- 先安装依赖包:
pip install webdriver-manager - 修改初始化代码:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

