为何我的Selenium自动化脚本运行时出现类找不到等报错?
运行代码
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Practice { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "E:\\ChromeDriver\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); // Navigate to google.com driver.get("https://www.google.com/"); } }
报错信息
SLF4J: 无法加载类“org.slf4j.impl.StaticLoggerBinder”。
SLF4J: 默认使用无操作(NOP)日志记录实现
SLF4J: 详情请查看相关文档。
ERROR StatusLogger Log4j2找不到日志实现,请将log4j-core添加到类路径中。使用SimpleLogger将日志输出到控制台...
Exception in thread "main" java.lang.NoClassDefFoundError: org/reactivestreams/Publisher
at org.asynchttpclient.netty.channel.ChannelManager.configureBootstraps(ChannelManager.java:212)
at org.asynchttpclient.DefaultAsyncHttpClient.(DefaultAsyncHttpClient.java:94)
at org.asynchttpclient.Dsl.asyncHttpClient(Dsl.java:32)
at org.openqa.selenium.remote.http.netty.NettyClient.createHttpClient(NettyClient.java:94)
at org.openqa.selenium.remote.http.netty.NettyClient.(NettyClient.java:47)
at org.openqa.selenium.remote.http.netty.NettyClient$Factory.createClient(NettyClient.java:135)
at org.openqa.selenium.remote.HttpCommandExecutor.(HttpCommandExecutor.java:116)
at org.openqa.selenium.remote.HttpCommandExecutor.(HttpCommandExecutor.java:94)
at org.openqa.selenium.remote.service.DriverCommandExecutor.(DriverCommandExecutor.java:88)
at org.openqa.selenium.chromium.ChromiumDriverCommandExecutor.(ChromiumDriverCommandExecutor.java:40)
at org.openqa.selenium.chrome.ChromeDriver$ChromeDriverCommandExecutor.(ChromeDriver.java:111)
at org.openqa.selenium.chrome.ChromeDriver.generateExecutor(ChromeDriver.java:101)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:88)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:84)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:52)
at script.Practice.main(Practice.java:12)
Caused by: java.lang.ClassNotFoundException: org.reactivestreams/Publisher
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 16 more
问题原因
核心是项目缺少必要的依赖包:
- 缺失Reactive Streams的
org.reactivestreams.Publisher类,导致AsyncHttpClient初始化失败,这是引发致命异常的直接原因 - 日志组件(SLF4J、Log4j2)依赖不完整,引发警告但不影响核心功能
解决步骤
方法1:用Maven/Gradle管理依赖(推荐)
Maven(pom.xml)
添加以下依赖,注意替换selenium-java的版本为当前最新稳定版(比如4.15.0):
<!-- Selenium核心依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.15.0</version> </dependency> <!-- 解决Reactive Streams缺失问题 --> <dependency> <groupId>org.reactivestreams</groupId> <artifactId>reactive-streams</artifactId> <version>1.0.4</version> </dependency> <!-- 消除日志警告(可选) --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.7</version> <scope>runtime</scope> </dependency>
Gradle(build.gradle)
dependencies { implementation 'org.seleniumhq.selenium:selenium-java:4.15.0' implementation 'org.reactivestreams:reactive-streams:1.0.4' runtimeOnly 'org.slf4j:slf4j-simple:2.0.7' }
方法2:手动添加JAR包
如果不用构建工具,直接下载以下JAR包放到项目类路径:
- Selenium Java核心包(官网下载对应版本)
reactive-streams-1.0.4.jarslf4j-simple-2.0.7.jar(可选,消除日志警告)
额外注意事项
- 版本匹配:ChromeDriver版本必须和本地Chrome浏览器版本完全一致,版本不兼容会引发各种异常
- 简化驱动管理:从Selenium 4.x开始,推荐用
WebDriverManager自动管理驱动,替代手动设置路径,避免路径错误:
使用这个需要添加import io.github.bonigarcia.wdm.WebDriverManager; public class Practice { public static void main(String[] args) { WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com/"); } }webdrivermanager依赖(Maven/Gradle均可)
内容的提问来源于stack exchange,提问作者Laxmi

