Java 含Crome和Maven的硒不起作用。ClassNotFoundException:org.apache.http.auth.Credentials
我想用Selenium运行无头Chrome,但此代码不起作用:Java 含Crome和Maven的硒不起作用。ClassNotFoundException:org.apache.http.auth.Credentials,java,maven,google-chrome,selenium,ubuntu,Java,Maven,Google Chrome,Selenium,Ubuntu,我想用Selenium运行无头Chrome,但此代码不起作用: ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--headless"); File file = new File("/usr/bin/chromedriver"); System.setProperty("webdriver.chrome.driver", file.getAbsolute
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
File file = new File("/usr/bin/chromedriver");
System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
WebDriver driver = new ChromeDriver(chromeOptions);
它可以很好地编译,但在运行时使用stacktrace崩溃:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials
at org.openqa.selenium.remote.HttpCommandExecutor.getDefaultClientFactory(HttpCommandExecutor.java:93)
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:72)
at org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(DriverCommandExecutor.java:62)
at org.openqa.selenium.chrome.ChromeDriverCommandExecutor.<init>(ChromeDriverCommandExecutor.java:39)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:184)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:171)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:158)
at org.chrome.automation.Starter.main(Starter.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 8 more
线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/http/auth/Credentials
位于org.openqa.selenium.remote.HttpCommandExecutor.getDefaultClientFactory(HttpCommandExecutor.java:93)
位于org.openqa.selenium.remote.HttpCommandExecutor。(HttpCommandExecutor.java:72)
位于org.openqa.selenium.remote.service.DriverCommandExecutor.(DriverCommandExecutor.java:62)
位于org.openqa.selenium.chrome.ChromeDriverCommandExecutor。(ChromeDriverCommandExecutor.java:39)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:184)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:171)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:158)
位于org.chrome.automation.Starter.main(Starter.java:20)
原因:java.lang.ClassNotFoundException:org.apache.http.auth.Credentials
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 8个以上
POM仅包含两个依赖项:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
org.seleniumhq.selenium
硒铬驱动器
3.4.0
org.seleniumhq.selenium
硒爪哇
3.4.0
我认为Selenium依赖中存在问题,因为它们依赖于一些apache代码,而不是下载依赖组件。我尝试添加apache依赖项,如:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.6</version>
</dependency>
org.apache.httpcomponents
httpclient
4.5.3
org.apache.httpcomponents
httpcore
4.4.6
但问题依然存在
请帮助使用headless Crome运行selenium。我仅使用一个依赖项即可解决此问题:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>2.53.1</version>
</dependency>
org.seleniumhq.selenium
硒铬驱动器
2.53.1
它也适用于3.3.1、3.2.0。正如我所看到的,这个问题只发生在3.4.0版本中。指定对
selenium chrome驱动程序的显式依赖性肯定是错误的,因为selenium java
已经包含了这一点
要在无头模式下运行Chrome,您需要Chrome最低版本59(Windows上的版本60)和以下代码:
System.setProperty("webdriver.chrome.driver", ...);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("headless", "disable-gpu");
WebDriver driver = new ChromeDriver(chromeOptions);
禁用gpu
是一个选项;更多详情请参见。我面临着同样的问题,不仅是chrome浏览器,还有其他浏览器。
似乎有一些罐子丢失了,请执行以下操作,它应该可以解决问题:
结束日食
转到“C:\Users\myuser.m2\repository”文件夹,并从此处删除所有文件和文件夹
打开elclipse,选择您的项目,执行alt+f5并选中“强制更新快照”选项李>
等到它建好了,现在就应该修好了李>
为我工作 确保类路径上存在此类。尝试在eclipse中打开它。如果它没有打开,试着手动下载jar我检查过了,知道什么?它在我的课堂路径中!我试图删除除chrome驱动程序之外的所有依赖项。它仍然在类路径中。名为httpclient-4.5.3.jar的jar文件。此外,您需要添加——禁用gpu
。正如您所见,这是一种推荐的方法@Madhan,stacktrace是关于错过的类:NoClassDefFoundError。这一论点如何解决?我这样问是因为当我尝试时,我也犯了同样的错误。我认为你的回答有误导性。如果你提到了一些绝对错误的东西,你应该添加正确的解决方案,并提到你称之为错误的东西可以很好地工作,只需再导入一个依赖项。这并不妨碍chrome驱动程序正常工作。对吗?你也可以看看我几周前的答案。问题只发生在selenium chrome驱动程序3.4.0上。@Pavlo我使用的是3.4.0,没有问题。我无法深入了解,因为没有资源检查所有环境详细信息并比较我和您的配置。它可以为某人工作,但对我来说不是。谢谢你的努力,让我知道更多关于这一点。