【问题标题】:C# Selenium Start Chrome with Different User ProfileC# Selenium 使用不同的用户配置文件启动 Chrome
【发布时间】:2018-03-02 16:38:15
【问题描述】:

在过去的 2 天里,我一直在尝试找到一种方法来使用不同的配置文件启动 Chrome,但无济于事。 无论我做什么,Selenium 为 chrome 加载的配置文件始终是一些临时配置文件,例如 "C:\Users\DARKBO~1\AppData\Local\Temp\scoped_dir14308_25046\Default"

我试过下面的代码:

ChromeOptions options = new ChromeOptions();
options.AddArgument(@"user-data-dir=C:\SeleniumProfiles\Default");

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("chrome://version");

首先我尝试直接从 Chrome 文件夹中使用配置文件的目录,但没有成功。然后我创建了一个新文件夹并将配置文件移到那里,我尝试在 C:\ 和 D:\ 中都这样做。没有任何区别。 我已经尝试运行 user-data-dir 参数,就像它当前在代码中一样,并且在它前面加上 -- 。我试过使用没有@符号的双反斜杠,仍然没有。无论我做什么,配置文件目录始终是 Selenium 临时目录。

附:我使用chrome user-data-dir=C:\SeleniumProfiles 命令通过命令提示符创建的当前 C:\SeleniumProfiles 目录

附: 2:我的错误很简单,我忘了把选项放在新驱动的构造函数中。正如 Tarun 所说,user-data-dir 只为 Chrome 提供了包含配置文件的目录,然后我们需要使用 profile-directory 参数来提供包含所需配置文件的子目录。

【问题讨论】:

  • 您实际上没有使用 options 变量。您需要像这样向 chromedriver 添加选项:IWebDriver driver = new ChromeDriver(options );
  • 神圣.....谢谢大声笑我不知道我是怎么错过的:D
  • 对,现在它可以工作了,但是无论我给它的配置文件的目录是什么,它都会在我指定的目录中创建另一个默认目录,并且它不使用我指定的配置文件中的设置。所以当我给它“C:\SeleniumProfiles\Default”时,chrome://version 中的配置文件路径变为“C:\SeleniumProfiles\Default\Default”
  • 发生了 :) 乐于助人

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


【解决方案1】:

您根本不使用选项对象。

IWebDriver driver = new ChromeDriver();

应该是

IWebDriver driver = new ChromeDriver(options);

Edit-1 - Chrome 配置文件和用户

Chrome 具有用于存储配置文件的用户数据目录。在此目录中可以维护多个配置文件。有两个参数可以使用

  • 用户数据目录
  • 个人资料目录

如果只指定了user-data-directory,那么将使用其中的Default 目录。如果指定了profile-directory,则使用user-data-directory 中的那个目录

【讨论】:

  • 对,现在它可以工作了,但是无论我给它的配置文件的目录是什么,它都会在我指定的目录中创建另一个默认目录,并且它不使用我指定的配置文件中的设置。所以当我给它“C:\SeleniumProfiles\Default”时,chrome://version 中的配置文件路径变为“C:\SeleniumProfiles\Default\Default”
  • 是的,chrome 有用户,当您在user-data-dir 中提供一个文件夹时,它会在所提供文件夹的Default 文件夹中为Default 用户创建配置文件。所以这是一个预期的行为
  • 那我应该怎么做才能让它使用 XXXXXX 文件夹中的配置文件,而不是在 XXXXXX 文件夹中创建一个新的默认文件夹?
  • 可以,您还需要设置profile-directory 参数。所以如果配置文件是c:\A\B\C 那么user-data-dir=C:\A\Bprofile-directory=C
  • 非常感谢塔伦!这就是我需要的,我不知道我需要第二个参数!所以基本上, user-data-dir 指定所有配置文件的主目录,而 profile-directory 指定包含所需配置文件的子目录:)
【解决方案2】:

如果您从正在查找的计算机上的浏览器配置文件开始,则可以

  1. 打开普通的谷歌浏览器并转到('chrome://version') enter link description here

  2. 复制配置文件路径,但获取所有“数据”文件夹并将其复制到程序运行的位置

  3. C# 编码:

    https://rextester.com/INK23784

通过在程序运行的地方创建一个名为“profile”的文件夹,您可以添加所有配置文件信息、插件等。等等。我们已经复制了所有内容中的数据文件夹,当打开浏览器“ChromeOptions”来硒您的个人资料文件等时,就是这样

【讨论】:

    【解决方案3】:

    你可以试试这个代码:(它对我有用)

    string path_profile = @"D:\PROJECT_XMARKETING_4.0\Profiles\1";
    // string path_profile = @"D:\PROJECT_XMARKETING_4.0\Profiles2\2";
    IWebDriver _webDriver;
    ChromeDriverService cService = ChromeDriverService.CreateDefaultService();
    cService.HideCommandPromptWindow = true;
    _webDriver = new ChromeDriver(cService);
    _webDriver.Manage().Cookies.DeleteAllCookies();
    ChromeOptions options = new ChromeOptions();
    options.AddArgument($"user-data-dir={path_profile}");
    _webDriver = new ChromeDriver(cService, options);
    //_webDriver.Navigate().GoToUrl("https://phamtani.com/");
    //_webDriver.Navigate().GoToUrl("https://alink.vn/");
    //_webDriver.Navigate().GoToUrl("http://api.hostip.info/get_json.php");
    

    【讨论】:

    • @phamtani 请提供一些解释。
    【解决方案4】:

    user-data-dir 设置为 C:\Users[your-username]\AppData\Local\Google\Chrome\User Data

    完整代码:

    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using OpenQA.Selenium.Support.UI;
    
    private IWebDriver _driver { set; get; }
    
    public YourConstructor()
    {
        _driver = CreateBrowserDriver();
    }
    
    private IWebDriver CreateBrowserDriver()
    {
        try
        {
            var options = new ChromeOptions();
            options.AddArgument("test-type");
            options.AddArgument("--ignore-certificate-errors");
            options.AddArgument("no-sandbox");
            options.AddArgument("disable-infobars");
            //options.AddArgument("--headless"); //hide browser
            options.AddArgument("--start-maximized");
            //options.AddArgument("--window-size=1100,300");
            //options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
    
            // Profile [Change:User name]
            options.AddArgument(@"user-data-dir=C:\Users\Haddad\AppData\Local\Google\Chrome\User Data");
    
            var service = ChromeDriverService.CreateDefaultService();
            service.HideCommandPromptWindow = true;
            service.SuppressInitialDiagnosticInformation = true;
    
            return new ChromeDriver(service, options);
        }
        catch
        {
            throw new Exception("Error: Chrome is not installed.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2017-12-10
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多