如何通过Selenium的--user-data-dir参数打开Chrome配置文件

Thr*_*nor 7 c# selenium google-chrome selenium-chromedriver selenium-webdriver

我正在尝试使用我现有的帐户和配置文件中的设置使用selenium加载chrome浏览器。
我可以使用ChromeOptions设置userdatadir和配置文件目录来使其工作。这会像我想要的那样用我的个人资料加载浏览器,但是浏览器随后挂起60秒钟并超时,而没有进行任何自动化操作。
如果我不使用用户数据目录和配置文件设置,则可以正常使用,但不使用我的配置文件。
我所做的阅读指出,一次不能使用相同的配置文件打开一个以上的浏览器,因此我确保在运行程序时没有打开任何文件。即使没有打开其他浏览器,它仍然挂起60秒。

m_Options = new ChromeOptions();
m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data");
m_Options.AddArgument("--profile-directory=Default");
m_Options.AddArgument("--disable-extensions");
m_Driver = new ChromeDriver(@"pathtoexe", m_Options);
m_Driver.Navigate().GoToUrl("somesite");
Run Code Online (Sandbox Code Playgroud)

它始终挂在GoToUrl上。我不确定还有什么尝试。

Deb*_*anB 12

根据您的代码试验,您尝试加载默认 Chrome 配置文件,这将违反所有最佳做法,因为默认 Chrome 配置文件可能包含以下任一内容:

  • 扩展
  • 书签
  • 浏览记录
  • 等等

因此,默认 Chrome 配置文件可能不符合您的测试规范,并且可能会在加载时引发异常。因此,您应该始终使用自定义的 Chrome 配置文件,如下所示。

创建打开新的Chrome 配置文件,您需要按照以下步骤操作:

  • 开放的Chrome浏览器,点击侧边菜单,然后点击设置在其上的网址 chrome://settings/打开。
  • 在“人员”部分,单击弹出窗口的管理其他人员
  • 单击ADD PERSON,提供人名,选择一个图标,保持选中为此用户创建桌面快捷方式的项目,然后单击ADD按钮。
  • 您的新个人资料已创建。
  • 新配置文件SeLeNiUm 的快照

硒

  • 现在桌面图标将创建为SeLeNiUm - Chrome
  • 从桌面图标SeLeNiUm - Chrome的属性中获取配置文件目录的名称。例如--profile-directory="配置文件 2"

配置文件目录

  • 获取系统中配置文件目录的绝对路径,如下所示:

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在将profile-directory的值通过ChromeOptions 的一个实例AddArgument和 key user-data-dir一起传递,如下所示:

    m_Options = new ChromeOptions();
    m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data/Profile 2");
    m_Options.AddArgument("--disable-extensions");
    m_Driver = new ChromeDriver(@"pathtoexe", m_Options);
    m_Driver.Navigate().GoToUrl("somesite");
    
    Run Code Online (Sandbox Code Playgroud)
  • 执行你的 Test

  • 观察Chrome使用Chrome 配置文件初始化为SeLeNiUm

硒

  • 那正是我正在做的。我不知道为什么它在目录结构中表现得很奇怪,并创建了一个新的配置文件作为子目录。浏览器以我的设置启动,只是无法导航。它只会挂在我的主页上并在 60 秒后超时。到目前为止,我提出的每次都有效的解决方案(目前有 15 个测试)是每次程序运行时将配置文件克隆到项目内的某个位置,然后将 selenium 指向该克隆。我不知道为什么会这样,但是指向实际的配置文件不起作用。 (2认同)
  • 同样的问题在这里。复制了所有建议的步骤,但只有克隆有效。 (2认同)
  • 在 Windows 10 环境中,克隆对我不起作用。我必须克隆 *and* 然后输入 options.add_argument('no-sandbox') 才能使其正常工作。值得注意的是,使用 options.add_argument('user-data-dir=selenium') 对我来说不起作用,我需要使用完整路径。用泡菜作为处理饼干的替代方法的实验对我来说也失败了。了解无沙箱问题:https://github.com/theintern/intern/issues/878 (2认同)