如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在可执行文件中包含带有 pyinstaller 的特定 .jar 文件?