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

C# 如何通过Selenium的--user data dir参数打开Chrome配置文件,c#,google-chrome,selenium,selenium-webdriver,selenium-chromedriver,C#,Google Chrome,Selenium,Selenium Webdriver,Selenium Chromedriver,我正在尝试使用我的现有帐户和配置文件中的设置加载带有selenium的chrome浏览器 我可以使用ChromeOptions设置userdatadir和profile目录来实现这一点。这会像我所希望的那样将我的个人资料加载到浏览器中,但浏览器会挂起60秒并超时,而不再进行任何自动化操作 如果我不使用用户数据目录和配置文件设置,它可以正常工作,但不使用我的配置文件 我所做的阅读表明,不能用同一个配置文件同时打开多个浏览器,因此我确保在运行程序时没有打开任何浏览器。即使没有打开另一个浏览器,它仍然

我正在尝试使用我的现有帐户和配置文件中的设置加载带有selenium的chrome浏览器

我可以使用ChromeOptions设置userdatadir和profile目录来实现这一点。这会像我所希望的那样将我的个人资料加载到浏览器中,但浏览器会挂起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");

它总是挂在走廊上。我不确定还可以尝试什么。

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

  • 扩展
  • 书签
  • 浏览历史记录
因此,默认的Chrome配置文件可能不符合您的测试规范,并且在加载时可能引发异常。因此,您应该始终使用自定义的Chrome配置文件,如下所示

要创建和打开新的Chrome配置文件,您需要遵循以下步骤:

  • 打开Chrome浏览器,单击侧菜单,然后单击url
    chrome://settings/
    打开
  • 在“人员”部分,单击弹出窗口的“管理其他人员”
  • 单击ADD PERSON,提供人名,选择图标,选中“为此用户创建桌面快捷方式”项,然后单击ADD按钮
  • 将创建您的新配置文件
  • 新配置文件的快照SeLeNiUm

  • 现在,桌面图标将创建为SeLeNiUm-Chrome
  • 从桌面图标的属性SeLeNiUm-Chrome获取配置文件目录的名称。e、 g.--profile directory=“profile 2”

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

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
    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");
    
  • 现在,使用
    AddArgument
    方法将profile directory的值与密钥用户数据dir一起传递给ChromeOptions实例,如下所示:

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
    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");
    
  • 执行您的
    测试

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

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

  • 扩展
  • 书签
  • 浏览历史记录
因此,默认的Chrome配置文件可能不符合您的测试规范,并且在加载时可能引发异常。因此,您应该始终使用自定义的Chrome配置文件,如下所示

要创建和打开新的Chrome配置文件,您需要遵循以下步骤:

  • 打开Chrome浏览器,单击侧菜单,然后单击url
    chrome://settings/
    打开
  • 在“人员”部分,单击弹出窗口的“管理其他人员”
  • 单击ADD PERSON,提供人名,选择图标,选中“为此用户创建桌面快捷方式”项,然后单击ADD按钮
  • 将创建您的新配置文件
  • 新配置文件的快照SeLeNiUm

  • 现在,桌面图标将创建为SeLeNiUm-Chrome
  • 从桌面图标的属性SeLeNiUm-Chrome获取配置文件目录的名称。e、 g.--profile directory=“profile 2”

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

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
    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");
    
  • 现在,使用
    AddArgument
    方法将profile directory的值与密钥用户数据dir一起传递给ChromeOptions实例,如下所示:

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
    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");
    
  • 执行您的
    测试

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

如果您想使用默认配置文件运行Chrome(因为您需要扩展),则需要使用其他浏览器(如Microsoft Edge或Microsoft IE)运行脚本,并且您的代码将包含一个Chrome实例

我的PHP代码:

namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

require_once('vendor/autoload.php');

$host = 'http://localhost:4444/';

$options = new ChromeOptions();
$options->addArguments(array(
    '--user-data-dir=C:\Users\paulo\AppData\Local\Google\Chrome\User Data',
    '--profile-directory=Default',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
));
   
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$caps->setPlatform("Windows");

$driver = RemoteWebDriver::create($host, $caps);

$driver ->manage()->window()->maximize();

$driver->get('https://www.google.com/');

// your code goes here.

$driver->quit();

如果您想使用默认配置文件运行Chrome(因为您需要扩展),则需要使用其他浏览器(如Microsoft Edge或Microsoft IE)运行脚本,并且您的代码将包含一个Chrome实例

我的PHP代码:

namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

require_once('vendor/autoload.php');

$host = 'http://localhost:4444/';

$options = new ChromeOptions();
$options->addArguments(array(
    '--user-data-dir=C:\Users\paulo\AppData\Local\Google\Chrome\User Data',
    '--profile-directory=Default',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
));
   
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$caps->setPlatform("Windows");

$driver = RemoteWebDriver::create($host, $caps);

$driver ->manage()->window()->maximize();

$driver->get('https://www.google.com/');

// your code goes here.

$driver->quit();

按建议将默认值添加到用户数据目录的末尾会导致它在现有默认文件夹中创建默认文件夹,而不使用我的配置文件。但它确实运行过一次。当试图在不更改任何代码的情况下重新运行它时,导致它挂起60秒,这使我认为在测试运行后某些内容没有得到正确清除,但我无法找出原因。@Thranor检查我的更新答案,并让我知道状态这正是我正在做的。我不知道为什么它在目录结构上表现得很不稳定,并创建了一个新的配置文件作为子目录。浏览器是用我的设置启动的,它无法导航。它会挂在我的主页上,60秒后超时。到目前为止,我提出的解决方案每次都有效(目前有15个测试),就是每次程序运行时将概要文件克隆到项目中的某个位置,然后将selenium指向该克隆。我不知道为什么会这样,但我要指出实际情况