Как открыть профиль Chrome с помощью аргумента --user-data-dir в 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");

Он всегда висит на GoToUrl. Я не уверен, что еще попробовать.

3 ответа

В соответствии с вашими испытаниями кода вы пытались загрузить профиль Chrome по умолчанию, что будет противоречить всем рекомендациям, поскольку профиль Chrome по умолчанию может содержать одно из следующих:

  • расширения
  • закладки
  • История браузера
  • так далее

Поэтому профиль Chrome по умолчанию может не соответствовать вашей спецификации тестирования и может вызвать исключение при загрузке. Следовательно, вы всегда должны использовать настроенный профиль Chrome, как показано ниже.

Для создания и открытия нового профиля Chrome вам необходимо выполнить следующие шаги:

  • Откройте браузер Chrome, нажмите на боковое меню и нажмите на настройки, на которых URL chrome://settings/ открывается.
  • В разделе " Люди " нажмите " Управление другими людьми", в которых появляется всплывающее окно.
  • Нажмите " ДОБАВИТЬ ЧЕЛОВЕКА", введите имя человека, выберите значок, оставьте флажок " Создать ярлык на рабочем столе для этого пользователя" и нажмите кнопку " ДОБАВИТЬ".
  • Ваш новый профиль будет создан.
  • Снимок нового профиля SeLeNiUm

Селен

  • Теперь значок на рабочем столе будет создан как SeLeNiUm - Chrome
  • Из свойств иконки на рабочем столе SeLeNiUm - Chrome получить имя каталога профиля. например --profile-directory="Профиль 2"

Профиль-справочник

  • Получите абсолютный путь к каталогу профиля в вашей системе следующим образом:

    C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
    
  • Теперь передайте значение profile-directory через экземпляр ChromeOptions с помощью AddArgument метод вместе с ключом user-data-dir следующим образом:

    m_Options = new ChromeOptions();
    m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data/Default");
    m_Options.AddArgument("--disable-extensions");
    m_Driver = new ChromeDriver(@"pathtoexe", m_Options);
    m_Driver.Navigate().GoToUrl("somesite");
    
  • Выполните свой Test

  • Заметьте, что 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 63 и селеном для управления я обнаружил ту же проблему (60 секунд ожидания открытия веб-страницы).

Чтобы исправить это, я нашел способ, установив веб-страницу по умолчанию в файле chrome ./[user-data-dir]/[Profile]/Preferences, это данные json, которые необходимо вставить в файл «Preferences» для получения результата

      ...
"session":{
  "restore_on_startup":4,
  "startup_urls":[
     "http://localhost/test1"
  ]
}
...

Для набора «Предпочтения» из селена я использую этот пример кода

      ChromeOptions chromeOptions = new ChromeOptions();

//set my user data dir
chromeOptions.addArguments("--user-data-dir=/usr/chromeDataDir/");  

//start create data structure to for insert json in "Preferences" file
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("session.restore_on_startup", 4);
List<String> urlList = new ArrayList<String>();
urlList.add("http://localhost/test1");
prefs.put("session.startup_urls", urlList);

//set in chromeOptions data structure 
chromeOptions.setExperimentalOption("prefs", prefs);

//start chrome
ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
//this get command for open web page, response instant
chromeDriver.get("http://localhost/test2")

у меня есть информация здесь https://chromedriver.chromium.org/capabilities

Другие вопросы по тегам