selenium的Chrome在java中打开报错的问题(selenium-java版本的问题)

问题列表:

1.  Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;

2.  

Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/internal/Require
    at org.openqa.selenium.json.NumberCoercer.<init>(NumberCoercer.java:49)
    at org.openqa.selenium.json.JsonTypeCoercer.<init>(JsonTypeCoercer.java:71)
    at org.openqa.selenium.json.JsonTypeCoercer.<init>(JsonTypeCoercer.java:53)
    at org.openqa.selenium.json.Json.<init>(Json.java:37)
    at org.openqa.selenium.remote.NewSessionPayload.create(NewSessionPayload.java:100)
    at org.openqa.selenium.remote.NewSessionPayload.create(NewSessionPayload.java:94)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:68)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
    at com.jt.foottest.chrometest.main(chrometest.java:10)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.internal.Require
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 16 more

Process finished with exit code 1

---------------------问题诸如此类-----------------

值得开心的是,之前一不小心没有换maven仓库的位置,导致可以正常登录浏览器了.而当我再别的项目里,配置完maven 就不行了.

排查:1.可能是和springboot框架冲突了?

  ----------不应该,回到之前没换maven仓库那里简单搭完框架后,发现可以正常运行

        2.jar包错了?

---------依照没有换maven仓库的项目重新下载jar包,依旧不对.

        3.把没有换maven仓库的jar包移过来看看?

--------

移了 
selenium-java的jar包文件夹,依旧没有用!

        4.看到网上说,下一个Selenium Server Standalone jar包?

--------依旧没有用!

        5.我还不信邪了,换个guava 包看看?

-----更新了多个版本依旧没有用!

        6.我把guava包全部移过来,总行了吧?

-----------发现:1.单独移

依旧没有用!

2.等一等,我发现还有一个包,名叫:

这个包移过来呢?有用!!!可以正常打开了.

测试代码分享: 

package com.tf.chrome;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class tst0001 {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.baidu.com/");
   
    }
}

pom.xml文件的加载包:

<!--webmagic-core核心包 -->
    <dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-core</artifactId>
        <version>0.7.5</version>
    </dependency>
    <!--webmagic-extension  拓展-->
    <dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-extension</artifactId>
        <version>0.7.5</version>
    </dependency>



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



    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.0.1-jre</version>
        <classifier></classifier>
    </dependency>

</dependencies>

 那么.parent包里面,到底有啥?到底是哪个才是关键?我也不知道了.对照上面的jar包文件夹图,大家看我下了多少个guava版本啊...然而,换版本没用啊,也不知道为啥,换了parents那个文件夹就好使了.

而parent文件夹里有多少文件?

 我也不知道哪个才是关键.不想试了,直接全部移到仓库里就能行.

-------------分割线------------

就在我以为是guava的问题时,我在框架中来回使用-----发现,又不好使了.换了guava也不行~

继续给我报了这样的错:

        java.lang.NoClassDefFoundError: org/openqa/selenium

直到遇上这篇文章:

 

辛亏英语好,发现其实就是

selenium-java

的版本太高了,然后有人跟他说你换成3.0左右版本就成,4.0以上不兼容. 结果这位老哥换了之后果然好了,就在问:兄弟,好了耶! 我想问一下,你又没有版本兼容的小册子可以给我参考下哦?!

然后 ,我去了这里,发现:

你看,3.1那个版本居然又420的下载量,明显高于其他很多很多倍.

那就简单了,换了试试:

 

 

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

果然,成功了!!!!!!!  

我再把它搞坏了试试... 再换回来,好使!这次是真的好使,原来是不兼容,我勒个去~~~~

所以,在这里我也想问跟那位老哥一样的问题,版本兼容的小册子,谁也能给我一个!!!

<think>好的,我现在需要解决用户的问题:如何在Java中配置Selenium以使用无头浏览器。首先,我得回忆一下Selenium WebDriver的基本用法,特别是与Java相关的配置。用户提到的是无头浏览器,这通常指的是在后台运行、没有图形界面的浏览器模式,比如Chrome或Firefox的无头模式。 首先,我应该确定用户可能使用的浏览器类型,常见的如Chrome和Firefox。然后,针对每种浏览器,查找对应的无头模式配置方法。记得Selenium针对不同浏览器有不同的驱动,比如Chrome需要ChromeDriver,而Firefox需要GeckoDriver。用户的问题明确是Java环境,所以需要提供Java代码示例。 接下来,我需要检查自己掌握的信息是否正确。比如,对于Chrome的无头模式,是否是通过Options类来设置?是的,ChromeOptions的addArguments方法可以添加“--headless=new”这样的参数。而Firefox则是使用FirefoxOptions,添加“-headless”参数。同时,还要注意不同浏览器版本可能需要不同的参数,比如旧版本Chrome可能使用“--headless”而没有“=new”,但最新版本推荐使用“--headless=new”。 然后,是否需要提到依赖管理?比如Maven或Gradle的依赖配置,但用户的问题主要是配置代码,可能不需要详细讲构建工具,但提供依赖示例可能会有帮助。比如,在pom.xml中添加Selenium Java客户端的依赖。 另外,用户可能遇到的问题,比如驱动版本不匹配,这也是常见的。比如ChromeDriver必须与Chrome浏览器的版本对应,否则会报错。这可能需要在回答中提醒用户注意,并附上检查版本的方法或官方链接。 然后,编写代码示例。对于Chrome,代码可能包括设置ChromeOptions,添加无头参数,初始化WebDriver时传入这些选项。同样,Firefox的配置类似,但使用不同的Options类。需要确保代码语法正确,符合Java的规范,比如正确的类名和方法调用。 可能还需要提到无头模式的一些限制或注意事项,比如截图、性能差异等,但用户的问题主要集中在配置上,所以可能不需要深入,但简要提及可以作为补充信息。 最后,验证这些步骤是否正确。是否遗漏了必要的步骤,比如下载并设置系统路径中的WebDriver?或者是否需要通过WebDriverManager来管理驱动版本?WebDriverManager可以自动下载合适的驱动版本,这可能对用户更方便,但用户的问题可能希望手动配置,所以可能需要两种方式的说明。 总结步骤: 1. 引入Selenium Java依赖。 2. 配置浏览器选项,启用无头模式。 3. 初始化WebDriver时传入选项。 4. 可选:使用WebDriverManager简化驱动管理。 5. 编写测试代码,验证无头模式是否生效。 然后,根据这些步骤组织回答,确保每个浏览器都有对应的代码示例,并解释关键点。同时,生成相关问题,如性能测试、不同浏览器的处理等,参考用户提供的引用内容中的相关点,比如引用[4]提到版本匹配的重要性,引用[5]提到多浏览器测试的背景。 检查是否需要引用这些来源,比如在提到版本匹配时引用[4],在讨论多浏览器测试时引用[5]。但用户的问题是关于配置无头模式,所以可能引用[4]关于版本匹配的部分。 最后,确保回答结构清晰,分步骤说明,代码正确,并且自然融入引用标记。</think>在Java中配置Selenium使用无头浏览器可通过以下步骤实现: --- ### 1. 添加依赖 确保项目中包含Selenium Java客户端库(以Maven为例): ```xml <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.10.0</version> </dependency> ``` --- ### 2. 配置无头浏览器 #### Chrome无头模式 ```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class HeadlessChrome { public static void main(String[] args) { ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); // 启用无头模式 options.addArguments("--disable-gpu"); // 可选:禁用GPU加速 WebDriver driver = new ChromeDriver(options); driver.get("https://example.com"); System.out.println("页面标题:" + driver.getTitle()); driver.quit(); } } ``` #### Firefox无头模式 ```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; public class HeadlessFirefox { public static void main(String[] args) { FirefoxOptions options = new FirefoxOptions(); options.addArguments("-headless"); // 启用无头模式 WebDriver driver = new FirefoxDriver(options); driver.get("https://example.com"); System.out.println("页面标题:" + driver.getTitle()); driver.quit(); } } ``` --- ### 3. 关键注意事项 - **驱动版本匹配**:需确保ChromeDriver与Chrome浏览器版本严格匹配,否则会报错[^4]。 - **性能优化**:无头模式通常比图形界面更快,但需注意内存管理和超时设置。 - **调试支持**:可通过截图或日志记录调试无头操作: ```java File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenshot, new File("screenshot.png")); ``` --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晦涩难董先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值