set chrome options with remote driver

Jachin picture Jachin · Nov 5, 2012 · Viewed 18.1k times · Source

So there's a nice long list of switches that can be passed to the chromedriver.

I would like to use some of them, specifically --disable-logging.

I do no want to (only) use chromedriver locally though, I'd like to write all my code to use webdriver.Remote().

Here's the code I use to setup a chrome driver and it works great for a vanilla chrome instance.

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

However I can not figure out how to pass in additional options.

When I look at driver.capabilities I see the following

{
    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
}

I don't see any other arguments (besides desired_capabilities) for passing arguments to chromedriver through webdriver.Remote. Is this true? Am I missing something? Is there some other strategy for customizing chromedriver?

There's a nice example on the CromeDrive wiki page that shows "Starting Chromium with Specific Flags" however all the example are for webdriver.Chrome(); the example is in java too, so it might not even work in python.

If anyone has gotten this to work or can tell me this just will not work I'd appreciate it. Thanks.

New Problem

I'm not sure the best way to handle follow up questions.

So, I got the answer to my question, but I'm still having trouble turning off logging. Checkout the following logger line.

[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

I can pass the argument --disable-logging to chromedriver but all it seems to care about is the first argument enabling logging. I guess I need to find out where the default arguments are for new instances of Chrome are kept.

Answer

root picture root · Nov 5, 2012

This should give you the flags available:

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())