project_0312 selenium

ooohyooo·2024년 3월 12일
0

myproject

목록 보기
14/44
2024-03-12 10:26:37 [http-nio-8082-exec-7] [ERROR] o.a.c.c.C.[.[.[.[dispatcherServlet] -
				Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.NoSuchMethodError: 'org.openqa.selenium.chromium.ChromiumOptions org.openqa.selenium.chrome.ChromeOptions.addArguments(java.lang.String[])'] with root cause
java.lang.NoSuchMethodError: 'org.openqa.selenium.chromium.ChromiumOptions org.openqa.selenium.chrome.ChromeOptions.addArguments(java.lang.String[])'

제공된 pom.xml 파일은 크롤링 코드와 직접적으로 관련이 없는 것으로 보입니다. 그러나 몇 가지 개선 및 주의사항이 있습니다:

의존성 버전 확인:

현재 Selenium의 버전은 4.9.0이지만, 가장 최신 버전을 사용하는 것이 좋습니다. Maven Central Repository를 통해 확인하여 필요한 버전으로 업데이트하세요.
자바 버전 지정:

현재 Java 버전이 17로 지정되어 있습니다. 사용하고 있는 Java 버전과 호환되는 다른 라이브러리 및 프레임워크 버전을 확인하세요.
Maven 빌드 프로파일 확인:

spring-boot-starter-parent의 버전은 3.1.9-SNAPSHOT으로 지정되어 있는데, 이는 현재 존재하지 않는 것으로 보입니다. 가장 최신의 안정된 버전을 사용하거나 프로젝트에 맞는 버전을 찾아서 지정하세요.
ChromiumDriver 사용 확인:

코드에서 ChromiumDriver를 사용하려면 해당 라이브러리가 의존성으로 추가되어 있어야 합니다. 필요한 경우 Selenium 버전에 따라 적절한 의존성을 추가하세요.
Lombok 관련 설정 확인:

org.projectlombok:lombok 의존성은 optional로 설정되어 있습니다. 이것이 의도된 것이라면 그대로 두세요. 그러나 Lombok을 사용 중이라면 해당 의존성을 필수로 설정하세요.
Spring Boot Maven Plugin 설정 확인:

Spring Boot Maven Plugin 설정에서 paketobuildpacks/builder-jammy-base:latest를 사용하고 있습니다. 이것이 의도된 것인지 확인하고 필요한 경우 수정하세요.

  • 일정 크롤링

    • List elements = driver.findElements(By.cssSelector(".relative"));로 데이터를 불러오려고 했는데 안되서 gpt한테 물어봤음

      만약 .relative로 태그를 지정했는데 원하는 값을 찾아오지 못한다면, 다음과 같은 몇 가지 원인이 있을 수 있습니다:
      동적 로딩: 페이지가 JavaScript나 Ajax 등을 사용하여 동적으로 데이터를 로드하는 경우가 있습니다. 이 경우 WebDriver가 페이지 로드를 기다리도록 하는 것이 좋습니다. WebDriverWait를 사용하여 해당 요소가 나타날 때까지 대기하는 방법을 시도해보세요.
      CSS 선택자 확인: .relative가 실제로 원하는 요소를 지정하는 올바른 CSS 선택자인지 확인하세요. Chrome 브라우저의 개발자 도구를 사용하여 해당 요소를 직접 확인하고 올바른 선택자를 찾아낼 수 있습니다.
      프레임/윈도우 전환: 페이지에 프레임이나 다른 윈도우가 있는 경우, 올바른 프레임이나 윈도우로 전환하는지 확인하세요. driver.switchTo().frame() 또는 driver.switchTo().window() 메서드를 사용하여 전환할 수 있습니다. 라고 말해줬고!

      // 웹 페이지 로드를 위한 대기
            WebDriverWait wait = new WebDriverWait(driver, 10);
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".relative")));
      
            List<WebElement> elements = driver.findElements(By.cssSelector(".relative"));
      
            for (WebElement element : elements) {
                String title = element.getText();
                System.out.println(title);
            }
    • 이런식으로 페이지 로드대기를 걸어줘보래

    • 그리고 The constructor WebDriverWait(WebDriver, int) is undefined 생성자 오류가 떠서 Duration 객체를 사용하여 타임아웃을 설정하는 방식으로 변경해보라함

 // 웹 페이지 로드를 위한 대기
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".relative")));

        List<WebElement> elements = driver.findElements(By.cssSelector(".relative"));

        for (WebElement element : elements) {
            String title = element.getText();
            System.out.println(title);
        }


잘나온다!
아니다....내가 원하는 데이터가 안나온다......

  • radio check시켜서 데이터 뽑아야하는데 자꾸 안해줘... timeout오류나고 고치면 호환 오류 같은거 나와ㅡㅡ

0개의 댓글

Powered by GraphCDN, the GraphQL CDN