【问题标题】:Selenium Firefox Driver - Unable to Load FirefoxProfile Due to "DirectoryNotFoundException"Selenium Firefox 驱动程序 - 由于“DirectoryNotFoundException”而无法加载 FirefoxProfile
【发布时间】:2019-02-26 02:16:42
【问题描述】:

我有最新版本的 Firefox(62.0 32 位)、Selenium(3.14.0.0)和 gecko 驱动程序(0.22.0 32 位)。我的代码如下:

var firefoxProfile = new FirefoxProfile("XXX");
FirefoxDriverService service = 
    FirefoxDriverService.CreateDefaultService("XXX", "geckodriver.exe");
service.FirefoxBinaryPath = "XXX";
driver = new FirefoxDriver(service, new FirefoxOptions { 
        BrowserExecutableLocation = "XXX", 
        Profile = firefoxProfile, 
        UseLegacyImplementation = false }, 
    new TimeSpan(0, 1, 30));

但是最后一行由于以下错误而失败:

System.IO.DirectoryNotFoundException: '找不到一部分 小路 'C:\Users\XXX\AppData\Local\Temp\anonymous.5bbc89e65ae54c058b27b9027039414b.webdriver-profile.parentlock'。'

当您查看目录时,“anonymous.5bbc89e65ae54c058b27b9027039414b.webdriver-profile”文件夹不存在。

我可以通过调用以下代码来生成一个文件夹:

firefoxProfile.WriteToDisk();

但是我仍然会遇到同样的错误,只是在运行我的代码的最后一行后使用了不同的“匿名”文件夹。

我可以通过启用“UseLegacyImplementation”来解决这个问题,但这会引入其他问题并且不是最佳的。

环顾四周,我没有看到任何地方引用了这条消息,Github 上引用了一些东西,但它是指配置文件被忽略,而不是错误。

我在旧版本的库和 firefox 上也有类似的代码,由于某种原因,当我尝试在另一台最新版本的机器上实现时,我遇到了这个问题。有人对此有意见吗?

【问题讨论】:

  • 我注意到,当您实例化一个新的 FireFoxDriver 对象时,您使用的是 FireFoxDriverService 作为第一个参数。我看到在本文档中使用 GeckoDriverService:seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/…。您是否尝试过使用 GeckoDriverService?
  • @RKelley 也许在 java 中,但我没有看到 c# library 中存在,不过这是一个好问题,“Selenium.WebDriver.GeckoDriver”可通过 NuGet 获得,我认为所有这些确实是将EXE复制到bin目录,检查包下的“驱动程序”文件夹证实了我的怀疑。 NuGet 包只是 EXE。不确定这在 c# 中是否可行。
  • 很抱歉。我在 Java 世界里待得太久了。

标签: c# selenium firefox selenium-webdriver selenium-firefoxdriver


【解决方案1】:

我设法重现了您的问题,但执行了以下操作并摆脱了它。

  1. 我从 Firefox about:profiles 创建了一个新配置文件 -> 新配置文件 Name = TestUser

  2. 复制此配置文件的位置(根目录)并在创建FirefoxProfile 的实例时使用它

    var firefoxProfile = new FirefoxProfile(@"C:\Users\[user]\AppData\Roaming\Mozilla\Firefox\Profiles\67fkrqcg.TestUser");
    FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"C:\geckodriver-v0.22.0-win32", "geckodriver.exe");
    service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
    var driver = new FirefoxDriver(service, new FirefoxOptions
        {
            BrowserExecutableLocation = @"C:\Program Files\Mozilla Firefox\firefox.exe",
            Profile = firefoxProfile,
            UseLegacyImplementation = false
        },
        new TimeSpan(0, 1, 30));
    

错误是由于方法DeleteLockFiles调用而引发的,根据documentation 删除配置文件的锁定文件。

我怀疑您忘记创建配置文件和/或没有指定正确的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多