You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium与Java时出现NoClassDefFoundError: okhttp3/ConnectionPool错误

解决Selenium运行时okhttp3.ConnectionPool找不到的问题

这个问题我之前踩过坑!虽然你觉得依赖配置没问题,但NoClassDefFoundError: okhttp3/ConnectionPool本质还是类加载的问题,大概率是依赖缺失、版本不匹配或者构建缓存导致的,咱们一步步来排查解决:

1. 确认依赖是否完整且版本匹配

Selenium 4.x及以后的版本依赖okhttp3库处理网络请求,如果你用Maven或Gradle管理依赖,先检查配置里有没有正确引入okhttp,并且版本和Selenium兼容:

Maven示例(pom.xml)

<!-- 确保Selenium依赖正确 -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.15.0</version> <!-- 替换成你实际使用的版本 -->
</dependency>
<!-- 若自动依赖未生效,可显式引入okhttp -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.11.0</version> <!-- 对应Selenium 4.15.0的兼容版本,可按需调整 -->
</dependency>

Gradle示例(build.gradle)

dependencies {
    implementation 'org.seleniumhq.selenium:selenium-java:4.15.0'
    implementation 'com.squareup.okhttp3:okhttp:4.11.0'
}

注意:不同版本的Selenium对应不同的okhttp版本,版本不匹配会直接导致类找不到,建议优先让构建工具自动管理依赖(只引入selenium-java,让它自动拉取所需的okhttp版本)。

2. 清理构建缓存,重新构建项目

有时候IDE或构建工具的缓存会导致依赖没有正确加载,试试这些操作:

  • 如果用Maven:执行命令 mvn clean install,清理旧构建文件并重新下载依赖
  • 如果用Gradle:执行命令 gradle clean build
  • 在IDE中(比如IntelliJ/Eclipse):清理缓存并重启,比如IntelliJ可通过File -> Invalidate Caches... -> Invalidate and Restart操作

3. 排查依赖冲突

可能你的项目里其他依赖引入了不兼容的okhttp版本,导致类加载冲突。可以用以下命令查看依赖树:

  • Maven:mvn dependency:tree
  • Gradle:gradle dependencies

找到输出中所有okhttp相关条目,如果有多个版本,排除掉旧的或不兼容的那个。比如Maven里可以用<exclusions>标签排除冲突依赖:

<dependency>
    <groupId>冲突依赖的groupId</groupId>
    <artifactId>冲突依赖的artifactId</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 手动导入Jar包的情况排查

如果你没有用构建工具,而是手动添加Jar包,要确保:

  • 已经把okhttp的Jar包(包括okhttp.jar和它的依赖okio.jar)添加到项目构建路径中
  • Jar包没有损坏,版本和Selenium匹配
  • IDE里没有把这些Jar包标记为“无效”或“未加载”

另外提个小建议:现在Selenium 4.x支持自动管理驱动,你可以用ChromeDriverManager替代手动设置系统属性,代码更简洁还能避免驱动路径问题:

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public static void main(String[] args) {
    WebDriverManager.chromedriver().setup();
    WebDriver driver = new ChromeDriver();
    driver.get("http://google.com");
}

内容的提问来源于stack exchange,提问作者Bota723

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:37:17