1. 为什么需要手动安装ChromeDriver?
在Ubuntu系统上使用Selenium进行浏览器自动化测试时,经常会遇到Chrome浏览器与ChromeDriver版本不匹配的问题。官方源中的ChromeDriver往往不是最新版本,这会导致测试脚本运行时出现"版本不兼容"的错误。特别是在持续集成(CI)环境中,这种问题会更加突出。
我最近在搭建自动化测试平台时就遇到了这个典型问题。系统提示:"This version of ChromeDriver only supports Chrome version XX",而我的Chrome浏览器已经自动更新到了最新版。经过多次实践,我总结出一套可靠的解决方案,下面将详细介绍完整操作流程。
2. 环境准备与依赖检查
2.1 确认现有Chrome浏览器版本
在开始安装前,我们需要先确认系统已安装的Chrome浏览器版本。打开终端执行:
bash复制google-chrome --version
典型输出类似:
code复制Google Chrome 114.0.5735.198
记下这个版本号(本例中的114),这将决定我们需要下载哪个版本的ChromeDriver。
注意:如果提示命令未找到,说明尚未安装Chrome浏览器。可以通过以下命令安装:
bash复制wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt install ./google-chrome-stable_current_amd64.deb
2.2 安装必要工具
确保系统已安装以下基础工具:
bash复制sudo apt update
sudo apt install -y wget unzip
这些工具将用于下载和解压ChromeDriver。
3. 获取匹配的ChromeDriver版本
3.1 确定下载地址
ChromeDriver的官方仓库位于Google的存储服务器,但直接查找最新版本比较麻烦。我们可以通过以下步骤获取准确的下载链接:
-
访问ChromeDriver的官方发布页面:
https://chromedriver.chromium.org/downloads -
在页面中找到与你的Chrome主版本号匹配的版本(前三位数字相同即可)
-
复制对应Linux版本的下载链接
3.2 自动化下载脚本
为了简化流程,我编写了一个自动获取最新版本的脚本:
bash复制CHROME_VERSION=$(google-chrome --version | awk '{print $3}')
DRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}")
wget -N "https://chromedriver.storage.googleapis.com/${DRIVER_VERSION}/chromedriver_linux64.zip"
这个脚本会:
- 获取当前Chrome版本号
- 查询匹配的Driver最新版本
- 下载对应的zip包
4. 安装与配置ChromeDriver
4.1 解压与安装
下载完成后,执行以下命令:
bash复制unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
这样就将ChromeDriver安装到了系统PATH包含的目录,并赋予了可执行权限。
4.2 验证安装
运行以下命令验证安装是否成功:
bash复制chromedriver --version
应该输出类似:
code复制ChromeDriver 114.0.5735.90 (...)
确认版本号与Chrome浏览器的主版本号一致(前三位数字相同)。
5. 常见问题与解决方案
5.1 版本不匹配错误
错误信息:
code复制SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version XX
解决方案:
- 确认Chrome浏览器是否为最新版:
bash复制sudo apt --only-upgrade install google-chrome-stable - 如果问题依旧,按照本文方法重新安装匹配版本的ChromeDriver
5.2 权限问题
如果遇到权限拒绝错误:
code复制bash: /usr/local/bin/chromedriver: Permission denied
执行:
bash复制sudo chmod a+rx /usr/local/bin/chromedriver
5.3 系统服务配置
对于在systemd服务中使用的情况,可能需要指定完整路径:
python复制from selenium import webdriver
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/google-chrome"
driver = webdriver.Chrome(
executable_path="/usr/local/bin/chromedriver",
options=options
)
6. 自动化维护方案
为了保持ChromeDriver与Chrome浏览器版本同步,可以设置定期任务:
- 创建更新脚本
/usr/local/bin/update_chromedriver:
bash复制#!/bin/bash
CHROME_VERSION=$(google-chrome --version | awk '{print $3}')
DRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}")
wget -N "https://chromedriver.storage.googleapis.com/${DRIVER_VERSION}/chromedriver_linux64.zip"
unzip -o chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
rm chromedriver_linux64.zip
- 添加可执行权限:
bash复制sudo chmod +x /usr/local/bin/update_chromedriver
- 设置每周自动更新(通过crontab):
bash复制(crontab -l 2>/dev/null; echo "0 3 * * 1 /usr/local/bin/update_chromedriver") | crontab -
7. 容器化环境特别说明
在Docker等容器环境中使用时,建议在构建镜像时直接安装固定版本:
Dockerfile复制# 获取最新Chrome稳定版
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \
&& apt-get update \
&& apt-get install -y google-chrome-stable
# 安装匹配的ChromeDriver
RUN CHROME_VERSION=$(google-chrome --version | awk '{print $3}') \
&& DRIVER_VERSION=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}") \
&& wget -N "https://chromedriver.storage.googleapis.com/${DRIVER_VERSION}/chromedriver_linux64.zip" \
&& unzip chromedriver_linux64.zip \
&& mv chromedriver /usr/local/bin/ \
&& chmod +x /usr/local/bin/chromedriver \
&& rm chromedriver_linux64.zip
这种方案可以确保每次构建时都使用兼容的浏览器和驱动版本。