wsh_wshkk 2024-12-07 10:43 采纳率: 70%
浏览 9
已结题

java.lang.ClassNotFoundException问题求解,无法找到主类

为什么会报错
错误: 找不到或无法加载主类 crawier.Crawier
原因: java.lang.ClassNotFoundException: crawier.Crawier

img

package crawier;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Crawier {

    public static void main(String[] args) {
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        String url = "https://www.shanghairanking.cn/rankings/bcur/2024";
        WebDriver driver = new FirefoxDriver(); 
        driver.manage().window().maximize();
        driver.get(url);

        List<Map<String, String>> ulist = new ArrayList<>();
        int page = 1;
        while (page <= 20) {
            // 等待页面加载完成
            new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("tbody")));
            Document doc = Jsoup.parse(driver.getPageSource());
            ulist.addAll(extractUniversityInfo(doc));
            scrollPage(driver);
            nextPage(driver, "li[title='下一页']");
            page++;
        }

        // 保存为JSON文件
        ObjectMapper mapper = new ObjectMapper();
        try {
            mapper.writerWithDefaultPrettyPrinter().writeValue(new File("university_rankings.json"), ulist);
        } catch (IOException e) {
            e.printStackTrace();
        }

        driver.quit();
    }

    private static List<Map<String, String>> extractUniversityInfo(Document doc) {
        Elements trs = doc.select("tbody tr");
        List<Map<String, String>> ulist = new ArrayList<>();
        for (Element tr : trs) {
            if (tr.tagName().equals("tr")) {
                Elements tds = tr.select("td");
                Map<String, String> university = extractUniversityDetails(tds);
                ulist.add(university);
            }
        }
        return ulist;
    }

    private static Map<String, String> extractUniversityDetails(Elements tds) {
        Map<String, String> university = Map.of(
            "排名", tds.get(0).select("div.ranking").text(),
            "logo", tds.get(1).select("img").attr("src"),
            "中文名", tds.get(1).select("a").get(0).text(),
            "英文名", tds.get(1).select("a").get(1).text(),
            "标签", tds.get(1).select("p").text(),
            "地址", tds.get(2).text(),
            "行业", tds.get(3).text(),
            "分数", tds.get(4).text(),
            "层次", tds.get(5).text()
        );
        return university;
    }

    private static void scrollPage(WebDriver driver) {
        ((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");
    }

    private static void nextPage(WebDriver driver, String cssSelector) {
        new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssSelector)))
        .click();
        try {
            Thread.sleep(1000); // 可以替换为更合适的等待方式,如 WebDriverWait
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的错误信息,java.lang.ClassNotFoundException: crawier.Crawier,这意味着Java运行时无法找到Crawier这个主类。解决这个问题通常需要检查以下几个方面:

    1. 类路径(Classpath)问题:确保您的类路径包含了Crawier.java编译后生成的类文件(或.class目录)。如果您在IDE(如Eclipse或IntelliJ IDEA)中运行程序,确保项目已正确构建并且类文件位于正确的目录中。
    2. 包名问题:您的Crawier类位于crawier包中。当从命令行运行Java类时,需要使用完整的包名。例如:java -cp . crawier.Crawier。确保您的命令行指令中的包名是正确的。
    3. 编译问题:确保Crawier.java已成功编译,并且生成的.class文件位于正确的目录中。
    4. 运行配置问题:如果您在IDE中运行程序,检查运行配置,确保主类和其他相关设置是正确的。
    5. JDK版本问题:检查您使用的JDK版本是否与项目中使用的版本一致。不同版本的JDK可能会有不同的类加载机制,导致此类错误。
    6. 文件和目录结构:确保您的文件和目录结构正确。根据您的描述和提供的图,似乎一切看起来都很正常,但还是要确认您的项目结构是否按预期组织。
    7. 外部库和依赖:如果Crawier类依赖于其他库或外部依赖项,请确保这些依赖项已正确配置并包含在类路径中。

    如果以上步骤都检查过了仍然无法解决问题,您可以尝试以下操作来获取更多信息:

    • 使用javac Crawier.java命令手动编译Crawier.java,并检查是否有编译错误。
    • 使用java -verbose:class -cp . crawier.Crawier命令运行Java程序,这将显示类加载的详细信息,帮助您定位问题。

    最后,请确保您的项目配置正确,并且所有必要的文件和依赖都已包含在内。希望这些建议能帮助您解决问题!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月24日
  • 创建了问题 12月7日