Как изолировать сеансы ChromeDriver, инициированные с помощью Selenium, чтобы каждое окно не разделяло состояние

При запуске нескольких экземпляров Chrome веб-драйвера я замечаю, что браузеры, похоже, делят между ними состояния. Мне интересно, есть ли опция ChromeDriver Preference, чтобы предотвратить любое совместное использование локального хранилища. Я хочу, чтобы каждый драйвер chrome работал в полной изоляции, чтобы автоматизация не влияла на состояние сеанса для всех остальных экземпляров.

Я думал, что простого запуска нескольких экземпляров веб-драйвера можно достичь, но это не так.

Я нашел ссылку на этот https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc?view=markup который является списком определения предпочтений для LocalStatePreferences, но трудно определить, какой вариант, если таковые имеются, собираются выполнить то, что я хочу.

Вот как я устанавливаю параметры драйвера для Chrome. Я подумал, что, возможно, установка каталога пользовательских данных поможет с изоляцией, но это не так. Я думаю, возможно, это как-то связано со всеми экземплярами, использующими один и тот же исполняемый файл.

private static ChromeOptions GetBrowserSettings(string directory, string downloads)
    {
        // http://chromedriver.chromium.org/capabilities
        // https://peter.sh/experiments/chromium-command-line-switches/

        var options = new ChromeOptions();

        options.AddArguments($@"user-data-dir={directory}\Chrome");
        options.AddUserProfilePreference("download.default_directory", downloads);

        var switches = new[] {
            "--disable-notifications",
            "--start-maximized",
            "--no-sandbox"
        };

        foreach (var option in switches)
            options.AddArgument(option);

        var parameters = new Dictionary<string, string>() {
            { "disable-popup-blocking","true"}
        };

        foreach (var param in parameters.Keys)
            options.AddUserProfilePreference(param, parameters[param]);

        return options;
    }

Я не до конца понимаю проблему, за исключением того, что знаю, что браузеры каким-то образом взаимодействуют друг с другом. Я предполагаю, что это из-за общего хранилища от запуска из того же исполняемого файла. Я могу ошибаться.

1 ответ

Немного больше информации было бы полезно для устранения вашей проблемы:

  • Значения времени выполнения {каталог}
  • ВерсияChromeDriver
  • ВерсияChromeBrowser

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

options.AddArguments($@"user-data-dir=C:\\path\\to\\your\\profile\\Google\\Chrome\\User Data\\Profile 2");

Подробное обсуждение можно найти в разделе Как открыть профиль Chrome через Python.


Теперь, согласно примечаниям к выпуску ChromeDriver v2.43, доступно исправление для Chromedriver, который получает дескриптор окна для вкладки, которая открывается вручную

Так что было бы рекомендовано:

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