Selenium:将chromeDriver和geckodriver嵌入到我的exe中

问题描述 投票:0回答:2

如何在没有安装的情况下将selenium项目制作成一个exe?我想将chromeDriver和geckodriver嵌入到我的exe中。

enter image description here

这可能吗?

c# selenium selenium-webdriver selenium-chromedriver
2个回答
0
投票

从技术上讲,您可以按照以下方式执行操作:首先,将ChromeDriver.exe作为嵌入式资源添加到项目中(有关详细信息,请参阅https://support.microsoft.com/en-us/help/319292/how-to-embed-and-access-resources-by-using-visual-c)。这会将ChromeDriver.exe直接嵌入到已编译的应用程序中。然后,当您启动应用程序时,请读取该资源的内容(作为字节流)并将该内容写入新文件。将此文件命名为ChromeDriver.exe。这样您的应用程序就会从其自身“生成”ChromeDriver.exe。最后,实例化ChromeDriver类,并将路径传递给新创建的ChromeDriver.exe文件。

但是,虽然此解决方案看起来很酷,但单独嵌入ChromeDriver.exe是不够的。您还需要将所有引用(包括Webdriver.dll)放在与应用程序相同的文件夹中。事实上,大多数.NET应用程序只能通过复制文件夹来安装,但不能只作为单个文件安装。从理论上讲,你也可以将你的项目所需的所有dll嵌入到内存中,然后在施放器启动时加载到内存中,但对于大多数情况来说这是一个巨大的过度杀伤力。因此,如果可以接受部署文件夹而不是单个文件,则只需将ChromeDriver.exe添加到该输出文件夹(通过将其作为内容文件添加到项目中并使用“始终复制”设置),并保存所有工作从资源中产生它。

最后,一个重要的注意事项:如果您将ChromeDriver.exe嵌入到嵌入式资源中,那么在发布新版本时,您将更难以更新它,而不是使用将其作为单独文件安装的NuGet包。


1
投票

实际上,通过以下几个步骤,这个过程非常简单!

  • 根据Arnon Axelrod的回答,您应该将chromedriver文件作为嵌入式资源文件放到项目中,并在应用程序加载时创建它。 您可以这样做:解决方案资源管理器 - >属性 - >(双击)Resources.resx 会弹出一个新标签!然后你可以像这张图片一样添加你的exe文件:Adding exe file as a resource
  • 在下一步中,您应该从“解决方案资源管理器”中选择添加的文件,并将其作为所选文件的“属性”窗口中的嵌入式资源文件。这张照片可能对你有所帮助:Setting a resource file as an embedded resource file
  • 然后,您可以使用以下函数来读取,创建和删除驱动程序文件:
//Reading and creating the chrome driver file
void ExtractResource(string path)
{
    byte[] bytes = Properties.Resources.chromedriver;
    File.WriteAllBytes(path, bytes);
}
//Create the chromedriver file on form load
private void Form1_Load(object sender, EventArgs e)
{
    string exePath = ".\\ChromeDriver.exe";
    ExtractResource(exePath);
}        
//Deleting the created file
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    File.Delete(exePath);
}
  • 现在,您可以在使用以下代码创建ChromeDriver对象时引用ChromeDriver文件:
ChromeDriver chromeDriver = new ChromeDriver(@".\\");

在创建上述对象之前,最好还是检查文件是否存在!

  • 对于最后一步,您应该将您的dll文件嵌入到exe输出中。实现这一目标的最直接方法是从NuGet包管理器安装“Fody”。您可以查看this link,了解有关将这个真棒工具添加到项目中的更多信息。
© www.soinside.com 2019 - 2024. All rights reserved.