当前位置: 首页 > news >正文

Selenium 4.18.1 + Chrome 122 环境配置:3种路径设置方案与版本匹配避坑

Selenium 4.18.1 + Chrome 122 环境配置:3种路径设置方案与版本匹配避坑指南

最近在帮团队搭建自动化测试环境时,发现不少同事在配置Selenium和ChromeDriver时频频踩坑。特别是当Chrome自动更新到122版本后,原先运行良好的脚本突然报错,排查半天才发现是版本不匹配的问题。本文将分享三种灵活的ChromeDriver路径配置方案,以及如何避免版本兼容性这个"隐形杀手"。

1. 版本兼容性:自动化测试的第一道门槛

上周团队里的小王遇到了一个典型问题:他的测试脚本突然报错"session not created: This version of ChromeDriver only supports Chrome version 119",而他的Chrome浏览器已经自动更新到了122版本。这种版本不匹配问题在自动化测试中相当常见。

1.1 Chrome与ChromeDriver版本对照表

根据官方文档和实际测试经验,我整理了当前主流版本的对应关系:

Chrome浏览器版本兼容的ChromeDriver版本Selenium版本要求备注
120.x120.0.6099.x≥4.11.0大版本必须一致
121.x121.0.6167.x≥4.12.0
122.x122.0.6261.x≥4.13.0推荐使用最新补丁版
123.x123.0.6312.x≥4.14.0

提示:从Chrome 115开始,Google调整了版本发布策略,建议始终保持浏览器和驱动的大版本号一致。

1.2 版本检查的三种方法

为了避免"我本地是好的,线上却报错"的尴尬情况,建议在脚本中加入版本检查逻辑:

import selenium from selenium import webdriver print(f"Selenium版本: {selenium.__version__}") try: driver = webdriver.Chrome() print(f"Chrome浏览器版本: {driver.capabilities['browserVersion']}") print(f"ChromeDriver版本: {driver.capabilities['chrome']['chromedriverVersion'].split(' ')[0]}") driver.quit() except Exception as e: print(f"版本检查失败: {str(e)}")

如果发现版本不匹配,可以通过以下命令指定版本安装:

# 安装指定版本的Selenium pip install selenium==4.18.1 # 查看已安装的Chrome浏览器版本 chrome://version/ # 在Chrome地址栏输入

2. 三种ChromeDriver路径配置方案

很多教程只介绍环境变量配置这一种方式,但在实际项目中,我们可能需要更灵活的方案。下面介绍三种各具优势的配置方法。

2.1 环境变量配置(适合固定环境)

这是最传统的方式,适合个人开发机或标准化部署环境:

  1. 下载对应版本的ChromeDriver
  2. 将解压后的可执行文件放在固定目录(如/usr/local/binC:\Program Files\chromedriver
  3. 将该目录添加到系统PATH环境变量

Windows配置示例

# 在PowerShell中临时添加PATH $env:Path += ";C:\path\to\chromedriver" # 永久生效需要修改系统环境变量 [System.Environment]::SetEnvironmentVariable( 'Path', [System.Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::Machine) + ";C:\path\to\chromedriver", [System.EnvironmentVariableTarget]::Machine )

macOS/Linux配置示例

# 将chromedriver移动到/usr/local/bin sudo mv ~/Downloads/chromedriver /usr/local/bin/ # 或者通过软链接 sudo ln -s ~/Downloads/chromedriver /usr/local/bin/chromedriver # 验证是否生效 which chromedriver

优点

  • 一次配置,全局可用
  • 不需要修改代码

缺点

  • 多版本管理不便
  • 团队协作时环境可能不一致

2.2 代码指定路径(适合多版本切换)

在创建WebDriver实例时直接指定路径,这种方式在需要同时管理多个ChromeDriver版本时特别有用:

from selenium import webdriver from selenium.webdriver.chrome.service import Service # 指定chromedriver路径 driver_path = "/path/to/chromedriver_122.0.6261.94" # 创建Service对象 service = Service(executable_path=driver_path) # 创建Driver实例 options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=service, options=options) # 使用示例 driver.get("https://www.baidu.com") print(driver.title) driver.quit()

进阶技巧:可以结合配置文件实现环境自适应

import os from pathlib import Path def get_driver_path(): # 从环境变量读取配置 custom_path = os.getenv("CHROMEDRIVER_PATH") if custom_path and Path(custom_path).exists(): return custom_path # 尝试常见安装位置 common_paths = [ "/usr/local/bin/chromedriver", "C:/Program Files/chromedriver/chromedriver.exe", str(Path.home() / "bin" / "chromedriver") ] for path in common_paths: if Path(path).exists(): return path raise FileNotFoundError("ChromeDriver not found in any standard location") # 使用示例 service = Service(executable_path=get_driver_path())

优点

  • 灵活控制不同环境使用不同版本
  • 便于版本切换和A/B测试
  • 适合CI/CD流水线

缺点

  • 需要维护路径配置
  • 代码量稍多

2.3 虚拟环境集成(适合项目隔离)

对于使用Python虚拟环境的项目,可以将ChromeDriver打包到项目环境中:

  1. 在项目根目录创建drivers/文件夹
  2. 将对应平台的ChromeDriver放入该目录
  3. 通过相对路径引用

项目结构示例:

my_project/ ├── drivers/ │ ├── chromedriver_win.exe │ ├── chromedriver_mac │ └── chromedriver_linux ├── requirements.txt └── tests/ └── test_sample.py

代码实现:

import sys from pathlib import Path def get_platform_driver(): """根据操作系统返回对应的driver路径""" project_root = Path(__file__).parent.parent drivers_dir = project_root / "drivers" if sys.platform.startswith('win'): return drivers_dir / "chromedriver_win.exe" elif sys.platform.startswith('darwin'): return drivers_dir / "chromedriver_mac" elif sys.platform.startswith('linux'): return drivers_dir / "chromedriver_linux" else: raise OSError("Unsupported operating system") # 使用示例 driver = webdriver.Chrome(service=Service(get_platform_driver()))

优点

  • 项目自包含,不依赖系统环境
  • 便于团队协作和版本控制
  • 支持多平台部署

缺点

  • 需要维护多个平台的二进制文件
  • 项目体积稍大

3. Selenium 4.x与Chrome 115+的特别注意事项

自从Chrome 115版本发布后,WebDriver的某些行为发生了变化,以下是几个容易踩坑的点:

3.1 Chrome for Testing的自动下载

Selenium 4.6.0+支持自动下载匹配的ChromeDriver:

from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 自动下载并配置合适的ChromeDriver service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service)

注意:在企业环境中可能需要配置代理或镜像源:

import os from webdriver_manager.core.utils import ChromeType os.environ['WDM_LOCAL'] = '1' # 优先使用本地缓存 os.environ['WDM_SSL_VERIFY'] = '0' # 跳过SSL验证(内网环境可能需要) service = Service( ChromeDriverManager( chrome_type=ChromeType.GOOGLE, url="https://npm.taobao.org/mirrors/chromedriver", latest_release_url="https://npm.taobao.org/mirrors/chromedriver/LATEST_RELEASE" ).install() )

3.2 新版ChromeOptions的变化

Chrome 115+移除了一些过时的选项,新增了若干配置项:

options = webdriver.ChromeOptions() # 已废弃的选项(会导致警告) # options.add_argument('--disable-infobars') # 推荐的新配置 options.add_argument('--disable-blink-features=AutomationControlled') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 无头模式的新写法 options.add_argument('--headless=new') # Chrome 112+支持 # 性能优化配置 options.add_argument('--disable-gpu') options.add_argument('--window-size=1920,1080') options.add_argument('--disable-extensions')

3.3 常见错误排查指南

当遇到问题时,可以按照以下步骤排查:

  1. 版本不匹配

    # 查看详细版本信息 print(driver.capabilities)
  2. 端口冲突

    service = Service(executable_path=driver_path, port=9515) # 指定非默认端口
  3. 权限问题(Linux/macOS):

    chmod +x /path/to/chromedriver
  4. 浏览器路径问题

    options.binary_location = "/path/to/chrome" # 指定非默认安装位置的Chrome
  5. 日志收集

    service = Service(log_output='chromedriver.log') # 输出日志到文件

4. 企业级部署的最佳实践

在团队协作或CI/CD环境中,推荐以下方案确保环境一致性:

4.1 使用Docker容器

创建包含确定版本组合的Docker镜像:

FROM python:3.11-slim # 安装Chrome RUN apt-get update && apt-get install -y \ wget \ gnupg \ && 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 \ && rm -rf /var/lib/apt/lists/* # 安装特定版本的ChromeDriver RUN CHROME_MAJOR_VERSION=122 \ && wget -O /tmp/chromedriver.zip \ "https://chromedriver.storage.googleapis.com/122.0.6261.94/chromedriver_linux64.zip" \ && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \ && chmod +x /usr/local/bin/chromedriver \ && rm /tmp/chromedriver.zip # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt WORKDIR /app COPY . . CMD ["python", "your_script.py"]

4.2 版本锁定策略

在项目中维护版本约束文件:

# requirements.txt selenium==4.18.1 webdriver-manager==3.8.6 # .chromedriver-version 122.0.6261.94

4.3 CI/CD集成示例

GitLab CI配置示例:

stages: - test selenium-test: stage: test image: selenium/standalone-chrome:122.0 variables: PYTHON_VERSION: "3.11" before_script: - apt-get update && apt-get install -y python${PYTHON_VERSION} - curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION} - python${PYTHON_VERSION} -m pip install -r requirements.txt script: - python${PYTHON_VERSION} -m pytest tests/

在实际项目中,我推荐组合使用代码指定路径和Docker容器化方案。这样既能保证开发环境的灵活性,又能确保生产环境的稳定性。特别是在团队协作场景下,统一的基础镜像可以避免90%的环境问题。

http://www.jsqmd.com/news/1170810/

相关文章:

  • 宝珀官方售后服务中心完整地址与热线实地考察报告_多信源验证(2026年7月更新) - 宝珀官方售后服务中心
  • 2026年威海企业宣传片制作公司排行榜:会议活动拍摄|视频直播服务商TOP榜单 - 政企影像扫地僧
  • 2026 年新发布:丰宁比较好的废钼片高价上门回收平台哪家可靠,别扔!那堆旧钼片在行家眼里,竟是能换半台冰箱的硬通货 - 实业推荐官【官方】
  • 2026年6月金属打印厂家评测:实力对比与选型参考 - 起跑123
  • 通信协议设计中的防混淆策略:从军事数字读法到 7 个软件命名原则
  • 2026宁波口碑好的幕墙玻璃铝板石材安装施工队评测 - 起跑123
  • 7天掌握数据分析四大核心工具:Excel、SQL、Power BI、Python实战指南
  • LR2021芯片智能家居方案:长距离低功耗混合组网实践
  • 2026述职报告AI工具横向测评:5款主流工具功能与场景对比
  • 2026年7月最新南京天梭官方售后服务热线与网点地址查询 - 天梭服务中心
  • Agent框架的核心能力
  • Linux入门|Xshell实操全套命令梳理+Shell脚本编写实战
  • 2026浙江证件卡套定制生产厂家实测评测参考 - 起跑123
  • NSK PSS2505N1D0699 滚珠丝杠技术手册
  • Git 分布式原理解析:对比SVN,3个核心优势与本地版本库的角色
  • OpenHarmony 通知消息 Notification 完整开发(API Version23 + 适配版)
  • 2026年7月最新南宁格拉苏蒂官方售后客户服务电话及线下网点地址 - 亨得利钟表维修中心
  • 异步 FIFO 设计:基于格雷码的 almost_full/empty 信号生成与验证
  • 2026年7月宁波外墙涂料翻新服务选型全指南 - 起跑123
  • UE5蓝图编程实战:5个案例带你掌握可视化脚本逻辑与数据流思想
  • AI漫剧制作全流程:从创意到成片的系统化工作流指南
  • 2026年7月浙江证件卡套定制生产厂家实测评测 - 起跑123
  • 2026年上海市诚信可靠的等离子清洗机厂家优选指南 - 品牌鉴赏官2026
  • 2026年7月性价比高的欧盟DWD认证咨询企业名单参考 - 起跑123
  • Java面试中那些容易被忽略的细节问题
  • NSK DFD 3205-6 高刚性重载滚珠丝杠详解
  • Unity UI合批失效?Sprite Atlas的Allow Rotation与Tight Packing陷阱解析
  • Linux内存性能分析:基础概念与BPF观察能力
  • 用“立少→超文本”写静态网页,标签<注音>
  • 2026年靠谱江西小炒品牌行业参考盘点 - 起跑123