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

Selenium ChromeDriver启动报错:ClassNotFoundException: org.openqa.selenium.devtools.HasDevTools

问题描述

计划开发一款基于SpringBoot、带图形界面的应用,通过Selenium ChromeDriver抓取信息并存储。目前SpringBoot和图形界面运行正常,但创建ChromeDriver实例时抛出NoClassDefFoundError,找不到org.openqa.selenium.devtools.HasDevTools类。相关代码、pom配置及报错信息如下:

核心代码

package com.example.printondemandsellerview;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class AmazonMerchScraper {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        // Navigate to the login page
        driver.get("https://merch.amazon.com/");

        // Find and click on the Sign In button
        WebElement signInButton = driver.findElement(By.id("merch-nav-sign-in"));
        signInButton.click();

        // Close the browser
        driver.quit();
    }
}

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>PrintOnDemandSellerView</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>PrintOnDemandSellerView</name>
    <description>PrintOnDemandSellerView</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.gluonhq</groupId>
            <artifactId>ignite-spring</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>net.rgielen</groupId>
            <artifactId>javafx-weaver-core</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>17.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>19-ea+7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

报错信息

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/devtools/HasDevTools
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at com.example.printondemandsellerview.AmazonMerchScraper.main(AmazonMerchScraper.java:12)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.devtools.HasDevTools
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 19 more

已尝试在新项目中单独创建该类、调整pom依赖,但均未解决问题。


解决建议

1. 清理重复的Selenium依赖

你的pom.xml中同时引入了selenium-api、selenium-chrome-driver、selenium-support和selenium-java,这会导致依赖冲突。selenium-java已经包含了其他三个依赖,只需保留selenium-java即可,删除其他三个Selenium相关依赖。修改后的依赖片段:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.5.3</version>
</dependency>

2. 匹配ChromeDriver与Chrome浏览器版本

Selenium 4.5.3对应的ChromeDriver版本必须和本地安装的Chrome浏览器大版本一致(比如Chrome 106对应ChromeDriver 106.x):

  • 查看Chrome版本:打开Chrome → 右上角三个点 → 帮助 → 关于Google Chrome
  • 下载对应版本的ChromeDriver,替换当前使用的C:\\Program Files (x86)\\chromedriver.exe

3. 改用Selenium内置驱动管理(推荐)

从Selenium 4开始,官方提供了自动驱动管理功能,无需手动设置系统属性。修改代码如下:

package com.example.printondemandsellerview;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class AmazonMerchScraper {

    public static void main(String[] args) {
        // 无需手动设置驱动路径,自动匹配浏览器版本
        ChromeOptions options = new ChromeOptions();
        WebDriver driver = new ChromeDriver(options);

        driver.get("https://merch.amazon.com/");
        WebElement signInButton = driver.findElement(By.id("merch-nav-sign-in"));
        signInButton.click();
        driver.quit();
    }
}

4. 清理Maven缓存并重新构建

执行以下命令清理本地Maven缓存,避免依赖损坏:

mvn clean install -U

5. 确认Java版本配置

Selenium 4.5.3支持Java 8及以上,你的项目使用Java 11没问题,但要确保IDE中的项目SDK配置正确指向Java 11。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:22:08