Не удается скрыть информационную панель Chrome, управляемую автоматизированным программным обеспечением, в Chrome v76

После обновления Chrome до версии 76 я не могу понять, как скрыть уведомление "Chrome управляется автоматизированным программным обеспечением...", перекрывающее некоторые элементы управления на странице.

Последний стабильный выпуск ChromeDriver действительно 76.0.3809.68. Следующий код работает с Chrome 75 и ChromeDriver 74.

var options = new ChromeOptions();
options.AddArgument("--test-type");
options.AddArgument("--disable-extensions");
options.AddArguments("disable-infobars");
options.AddArguments("--disable-notifications");
options.AddArguments("enable-automation");
options.AddArguments("--disable-popup-blocking");
options.AddArguments("start-maximized");
var driver = new ChromeDriver(driverLocation, options, ScriptTimeout);

9 ответов

Начиная с 1 августа 2019 г. - вы можете отправить исключающий переключатель - enable-Automation, чтобы скрыть сообщение. и чтобы отключить всплывающее окно "Отключить расширения режима разработчика", установите useAutomationExtension=false . Обратитесь за использованием AutomationExtension

Протестировано на: Windows 10 Версия 76.0.3809.87 (Официальная сборка) (64-разрядная версия) ChromeDriver 76.0.3809.68

--enable-Automation: информировать пользователей о том, что их браузер контролируется с помощью автоматического теста.

     "goog:chromeOptions": {

        "excludeSwitches": [ "enable-automation" ],
        "useAutomationExtension": false
     }

В C#:

Для отключения всплывающего окна "Отключить расширения режима разработчика" и сообщения информационной панели автоматизации.

options.AddExcludedArgument("enable-automation");
options.AddAdditionalCapability("useAutomationExtension", false);

В ЯВА:

options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);

В Python:

options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

В транспортире:

Добавьте следующие возможности в conf.js/conf.ts

capabilities: {
    'browserName': 'chrome',
    "goog:chromeOptions": {
      "excludeSwitches": [ "enable-automation" ],
      "useAutomationExtension": false
   }
  },

Команда Chromium ранее представила инфобар Chrome is being controlled by automated test software отключить Developer mode extension всплывающее окно в браузере Chrome через этот коммит.

В соответствии с обсуждением Flakiness из-за информационной панели Chrome (Chrome 57+) с добавлением информационной панели для отображения, если сеанс управляется автоматическим тестом в Chrome, было отмечено, что наличие информационной панели Chrome автоматизации Chrome is being controlled by automated test software периодически вызывал click() Функция потерпеть неудачу. Во время испытаний, когда инфобар был удален путем прохождения disable-infobars в chrome_launcher.cc тогда вышеуказанные тесты выполняются, как и ожидалось, без каких-либо проблем. gmanikpure@chromium.org подтвердил, что виновником был журнал изменений:

Add an infobar if a session is being controlled by an automated test.

This infobar is only displayed if the browser is launched with the --enable-automation switch. It also disables the developer mode extensions warning bubble.

TEST=launch with and without --enable-automation, and check for presence of automation infobar

Было замечено, что во время клика происходит анимация инфобара, и мы получаем нестабильные результаты. Поэтому команде Chromium нужно было как-то обнаружить это изменение и пересчитать позицию. Фактическая проблема заключалась в том, что если возникла страница Page.frameResized, мы можем сделать недействительными результаты некоторых операций и повторить попытку (например, получить положение элемента), но были другие операции, которые могут изменить страницу, например щелчки мыши. Возможно, что щелчок мыши (который включает в себя перемещение мыши, mousedown и событие mouseup) может иметь событие изменения размера в середине.

Соответственно, команда Chromium выпустила ревизию через этот коммит:

Disable info bar animations during automated testing.

С тех пор пользователь Chrome для отключения инфобара начал использовать:

  • Ява:

    options.addArguments("disable-infobars");
    
  • Python:

    options.add_argument("disable-infobars")
    
  • C#:

    option.AddArguments("disable-infobars");
    

Теперь в обсуждении Chrome управляется автоматизированным тестовым программным обеспечением. Инфобар не подавляется, несмотря на использование аргумента disable-infobars Член команды Chromium triciac@chromium.org четко упомянул:

Начиная с версии 76, возможность подавления информационной панели была перенесена из параметров командной строки в параметры корпоративной политики для Chrome.

Изменение уже упоминалось в примечаниях к выпуску и примечаниям к выпуску Chrome Enterprise следующим образом.

--disable-infobars is no longer supported

Chrome will no longer support the --disable-infobars flag, which was used to hide pop-up warnings
from Chrome Browser. To support automated testing, kiosks, and automation, the
CommandLineFlagSecurityWarningsEnabled policy was added to allow you to disable some security
warnings.

Итак, начиная с Chrome v76.x --disable-infobars Флаг официально устарел.


Заключение

Политика не является опцией или возможностью, которая устанавливается при запуске ChromeDriver или Chrome, поскольку политики безопасности обычно управляются корпоративным ИТ-отделом. Отсюда использование disable-infobars были объявлены устаревшими


Маленький хак

--disable-infobars флаг все еще можно удалить из Chrome v76.x, используя следующее решение:

  • Ява:

    ChromeOptions options = new ChromeOptions();
    options.addArguments("start-maximized");
    options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://google.com");
    
  • Python:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www.google.co.in')
    

Outro

Согласно статье CommandLineFlagSecurityWarningsEnabled:

Enable security warnings for command-line flags

Supported on: Google Chrome (Linux, Mac, Windows) since version 76

Description: If disabled, prevents security warnings from appearing when Chrome is launched with some potentially dangerous command-line flags.
             If enabled or unset, security warnings are displayed when some command-line flags are used to launch Chrome.
             On Windows, this policy is only available on instances that are joined to a Microsoft Active Directory domain or Windows 10 Pro or Enterprise instances that are enrolled for device management.

Это будет работать в C#:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--incognito");
chromeOptions.AddExcludedArgument("enable-automation");
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);

Чтобы скрыть информационную панель "Chrome управляется программным обеспечением для автоматического тестирования" в C# для Chrome v76:

var chromeOptions = new ChromeOptions();
...
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
chromeOptions.AddExcludedArgument("enable-automation");
...
var driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), chromeOptions, commandTimeout);
  1. Вы можете использовать --app=desired_address_without_brackets флаг, например --app=https://google.com. Работает в Chrome 80.
    Конечно, это работает, только если для вашего проекта допустимо запуск в режиме приложения и у вас есть ссылка на страницу, которую вы можете вставить туда. См. Этот мой ответ для получения дополнительной информации.

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

В Ruby для гема selenium-webdriver, который часто используется с Capybara, используйте ::Selenium::WebDriver::Chrome::Options#add_option('excludeSwitches', ['enable-automation']).

Например:

      Capybara.register_driver :selenium_chrome do |app|
  browser_options = ::Selenium::WebDriver::Chrome::Options.new
  browser_options.add_option 'excludeSwitches', ['enable-automation']
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end

Другой вариант в Ruby для меня был:

      Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: chrome_options)
end

def chrome_options
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_option 'excludeSwitches', ['enable-automation']
  options.add_argument('incognito')
  options.add_argument('disable-geolocation')
  options.add_argument('ignore-certificate-errors')
  options.add_argument('disable-popup-blocking')
  options.add_argument('disable-web-security')
  options.add_argument('--disable-infobars')
  options.add_argument('disable-translate')
  options
end

По-видимому, вы можете использовать политику Chrome CommandLineFlagSecurityWarningsEnabled - https://www.chromium.org/administrators/policy-list-3

В Linux я смог создать файл в /etc/opt/chrome/policies/managed/managed_policies.json с содержимым: {"CommandLineFlagSecurityWarningsEnabled": false} и это отключило предупреждение.

В Windows 10 Pro, когда я отключил групповую политику Chrome "Включить предупреждения безопасности для флагов командной строки" (см. https://support.google.com/chrome/a/answer/187202) и проверил реестр в Software\Policies\Google\Chrome\CommandLineFlagSecurityWarningsEnabled со значением 0x00000000 не позволяет отключить это предупреждение. Может быть, это будет для вас? Хотите знать, если кто-то может помочь пролить свет на то, почему это не будет работать на Windows

Как упоминалось выше, в Java просто используйте:

chromeOptions.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));

с:

      chromeOptions.setExperimentalOption("useAutomationExtension", false);

устарел и работает так же.

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