Selenium Firefox驱动程序-由于“ DirectoryNotFoundException”而无法加载FirefoxProfile

时间:2018-09-21 16:16:59

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

我拥有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中使用过类似的代码,由于某些原因,当我尝试在另一台机器上实现所有最新版本时,都会遇到此问题。有人对此有任何意见吗?

1 个答案:

答案 0 :(得分:2)

我设法重现了您的问题,但进行了以下操作并消除了它。

  1. 我从Firefox about:profiles->新配置文件中创建了新的配置文件名称 = 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 删除配置文件的锁定文件)而引发了错误。

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