首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >org/openqa/selenium/virtualauthenticator/HasVirtualAuthenticator java.lang.NoClassDefFoundError: Gradle,Selenium和ChromeDriver

org/openqa/selenium/virtualauthenticator/HasVirtualAuthenticator java.lang.NoClassDefFoundError: Gradle,Selenium和ChromeDriver
EN

Stack Overflow用户
提问于 2022-10-17 16:51:50
回答 1查看 62关注 0票数 0

我是新手,我想从网址上提取html。我决定尝试使用Selenium,并绘制了如下所示的服务:

代码语言:javascript
运行
复制
package dataox.keithgellmanrestaurantmenuscraping;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.RandomUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
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;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;

import java.util.List;

@Log4j2
@Service
@RequiredArgsConstructor
public class ParserService {

        private final ChromeOptions options = new ChromeOptions();
    
    
        @EventListener(ApplicationReadyEvent.class)
        public void a() {
            String url = "some url";
            WebDriver webDriver = getWebDriver(url);
            log.info(webDriver.getPageSource());
            quitWebdriver(webDriver);
        }
    
        private WebDriver getWebDriver(String url) {
            WebDriver webDriver = new ChromeDriver(options);
            webDriver.get(url);
            return webDriver;
        }
    
        private void quitWebdriver(WebDriver webDriver) {
            webDriver.close();
            webDriver.quit();
        }
}

当我启动它时,我会得到以下错误:"WebDriver webDriver =新ChromeDriver(options)":

代码语言:javascript
运行
复制
java.lang.reflect.UndeclaredThrowableException: Failed to invoke event listener method
HandlerMethod details: 
Bean [dataox.keithgellmanrestaurantmenuscraping.ParserService]
Method [public void dataox.keithgellmanrestaurantmenuscraping.ParserService.a()]
Resolved arguments: 

Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/virtualauthenticator/HasVirtualAuthenticator

我和Gradle一起工作,我的gradle.build看起来是这样的:

代码语言:javascript
运行
复制
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-api', version: '3.141.59'
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.141.59'
    implementation group: 'org.jsoup', name: 'jsoup', version: '1.15.3'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
} 

在这种情况下,最好的做法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-19 10:47:29

我自己找到了答案。事实证明,对Gradle来说,完全删除这些版本就足够了。Spring会提取那些与工作相关的版本。

代码语言:javascript
运行
复制
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-api'
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver'
    implementation group: 'org.jsoup', name: 'jsoup', version: '1.15.3'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74100613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档