如何在 JAR 中包含 ChromeDriver?

Posted

技术标签:

【中文标题】如何在 JAR 中包含 ChromeDriver?【英文标题】:How can I include ChromeDriver in a JAR? 【发布时间】:2014-03-06 04:31:56 【问题描述】:

我正在编写一个网络自动化程序,到目前为止,它使用 Selenium 的 FirefoxDriver 运行良好。但是,如果没有安装 Firefox,我想让它使用 Chrome。我下载了 ChromeDriver,将它放在我的 Eclipse 项目中的一个文件夹中,然后运行它。在我添加System.setProperty("webdriver.chrome.driver", "Drivers/chromedriver.exe"); 之后,它运行良好。但是,当我尝试导出它时(使用 Eclipse 的标准导出)。我相信它崩溃了,因为它找不到 ChromeDriver(我认为这是因为使用 FirefoxDriver 导出它可以正常工作)。

我尝试将 .JAR 更改为 .ZIP 以查看内部,我看到 driver 文件夹已被剥离,只需将 chromedriver.exe 放在*** JAR 中。我尝试将属性更改为System.setProperty("webdriver.chrome.driver", "chromedriver.exe");,但仍然崩溃。

有谁知道为什么导出的 JAR 无法找到 chromeDriver,尽管我已经验证它在 JAR 中?

谢谢, 丹尼尔

【问题讨论】:

这似乎有点傻,但你有“Chromedriver.exe”,但它被列为小写“chromedriver.exe”。你试过把它改成小写吗? 简单的错字,现已修正。 (在我的实际代码中,它到处都是小写) 澄清一下,这并不能解决您的实际问题吗? 不,同样的错误仍然存​​在。我只是说我在这里修正了错字。 【参考方案1】:

你必须在运行它之前解压它。 在 src/resources/drivers/chromedriver.exe 下复制您的驱动程序

现在,每当您运行此代码时,它都会在您放置 Runnable jar 并复制您可以访问的驱动程序的位置创建一个新文件夹“Driver”。

ClassLoader classLoader = getClass().getClassLoader();
                URL resource = classLoader.getResource("resources/drivers/chromedriver.exe");
                File f = new File("Driver");
                if (!f.exists()) 
                    f.mkdirs();
                
                File chromeDriver = new File("Driver" + File.separator + "chromedriver.exe");
                if (!chromeDriver.exists()) 
                    chromeDriver.createNewFile();
                    org.apache.commons.io.FileUtils.copyURLToFile(resource, chromeDriver);
                
                System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath());
                driver = new ChromeDriver();

【讨论】:

【参考方案2】:

在没有 chromedriver 的情况下将您的代码导出为 jar。 创建一个文件夹 ChromeDriver。将您的 chromedriver.exe 放在此文件夹中。 将 ChromeDriver 文件夹与您的 jar 一起放置。

另外不要忘记将代码中的System属性设置为

System.setProperty("webdriver.chrome.driver", "ChromeDriver/chromedriver.exe"); 

如果这对你有用,请告诉我。

【讨论】:

虽然我看不出这不起作用的原因,但我真的希望能够让用户只需要下载一种类型的文件。这种方法应该可以工作,尽管jar 将不再是自给自足的。 这行得通。虽然它没有直接回答问题,但它是一种更优雅的方法。维护 webdriver 二进制文件应该是使用它的环境的责任,因为 JAR 可以在不同的环境/平台中执行。您可以简单地将 JAR 和 chromedriver.exe 打包到 ZIP 中。【参考方案3】:

它在 Jar 中但无法执行(与尝试从 zip 文件运行 .exe 相同),您必须在运行前解压它

【讨论】:

好的,我该怎么做呢? 在此处查看示例:***.com/questions/12531766/… 谢谢!那行得通!我在将chromedriver 放置在哪里以便找到它时遇到了一个小问题,但是当我将它放在src 文件夹中时,这个问题得到了解决。再次感谢!

以上是关于如何在 JAR 中包含 ChromeDriver?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Maven 项目中包含本地 jar 文件 [重复]

如何在 Maven 生成的 jar 中包含特定文件夹?

如何在可执行文件中包含带有 pyinstaller 的特定 .jar 文件?

如何在 Android 中包含 Spongy Castle JAR?

如何防止 ProGuard 在输出 jar 中包含引用的库

如何在我的 gradle java 项目中包含外部 .jar? [复制]