Установить параметры хрома с помощью удаленного драйвера

Итак, есть хороший длинный список переключателей, который можно передать хронографу.

Я хотел бы использовать некоторые из них, в частности --disable-logging.

Я не хочу (только) использовать chromedriver локально, хотя я бы хотел написать весь свой код для использования webdriver.Remote().

Вот код, который я использую для установки драйвера chrome, и он отлично работает для экземпляра vanilla chrome.

driver = webdriver.Remote(
    command_executor = 'http://127.0.0.1:4444/wd/hub',
    desired_capabilities = {
        'browserName': 'chrome',
    }
)

Однако я не могу понять, как передать дополнительные параметры.

Когда я смотрю driver.capabilities, я вижу следующее

{
    u'rotatable': False,
    u'browserConnectionEnabled': False,
    u'acceptSslCerts': False,
    u'cssSelectorsEnabled': True,
    u'javascriptEnabled': True,
    u'nativeEvents': True,
    u'databaseEnabled': False,
    u'chrome.chromedriverVersion': u'23.0.1240.0',
    u'locationContextEnabled': False,
    u'takesScreenshot': True,
    u'platform': u'MAC',
    u'browserName': u'chrome',
    u'webdriver.remote.sessionid': u'1352096075502',
    u'version': u'22.0.1229.94',
    u'applicationCacheEnabled': False,
    u'webStorageEnabled': True,
    u'handlesAlerts': True,
    u'chrome.nativeEvents': False
}

Я не не вижу других аргументов (кроме desired_capabilities) для передачи аргументов в хромированный реверс через webdriver.Remote. Это правда? Я что-то упускаю? Есть ли другая стратегия для настройки хромирования?

Вот хороший пример на странице вики CromeDrive, где показано Запуск хрома с конкретными флагами", однако все примеры приведены для webdriver.Chrome(); пример также находится в java, поэтому он может даже не работать в python.

Если кто-то получил это на работу или может сказать мне, что это просто не сработает, я был бы признателен. Спасибо.

Новая проблема

Я не уверен, как лучше обработать последующие вопросы.

Итак, я получил ответ на свой вопрос, но мне все еще не удается отключить ведение журнала. Оформить следующую строку журнала.

[0.455][INFO]:      Launching chrome: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --enable-logging --log-level=1 --disable-hang-monitor --disable-prompt-on-repost --dom-automation --full-memory-crash-report --no-default-browser-check --no-first-run --disable-background-networking --disable-sync --disable-translate --disable-web-resources --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --use-mock-keychain --ignore-certificate-errors --disable-logging about:blank

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

Ответ 1

Это даст вам доступные флаги:

from selenium import webdriver
options = webdriver.ChromeOptions()
# set some options
# for example:
# options.add_argument('--disable-logging')
driver = webdriver.Remote(desired_capabilities=options.to_capabilities())

Ответ 2

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

Посмотрев, как запустить хром с определенными флагами, возможно, что-то вроде этого будет работать:

desired_capabilities = {
    'browserName': 'chrome',
    'chrome.switches': ['--disable-logging']
}

Ответ 3

ChromeOptions(), который работает для передачи дополнительных аргументов. попробуйте отключить chromedriver.log

driver = webdriver.Chrome(service_log_path='/dev/null')

Ответ 4

Только мои два цента на этом, так как изменились удаленные и хромовые веб-драйверы Selen.

import os
from selenium import webdriver


class RemoteBrowser:

    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('whitelisted-ips')
    chrome_options.add_argument('headless')
    chrome_options.add_argument('no-sandbox')
    chrome_options.add_argument('window-size=1200x800')

    def __init__(self):
        self.hub_url = os.environ['HUB_URL']
        self.driver = webdriver.Remote(
            command_executor='http://' + self.hub_url + '/wd/hub',
            desired_capabilities = {'browserName': 'chrome'},
            options=self.chrome_options
        )