Как открыть профиль 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