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

时间:2018-03-21 10:03:41

标签: c# selenium selenium-webdriver selenium-chromedriver

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

enter image description here

这可能吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

实际上,通过执行几个步骤,过程非常容易!

  • 根据Arnon Axelrod的回答,您应该将chromedriver文件作为嵌入式资源文件放置到项目中,并在应用程序加载时创建它。

    您可以通过以下方法执行此操作:解决方案资源管理器->属性->(双击)Resources.resx

    将弹出一个新标签页!然后您可以添加您的exe文件,如下图: Adding exe file as a resource

  • 在下一步中,您应该从“ Solution Explorer”中选择添加的文件,并在所选文件的“ Properties”窗口中将其作为嵌入式资源文件。这张图片可能会为您提供更多帮助: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以获得有关将这个很棒的工具添加到您的项目中的更多信息。