Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

set chrome options with remote driver

Tags:

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.

like image 729
Jachin Avatar asked Nov 05 '12 06:11

Jachin


People also ask

How do I pass Chrome options as capabilities?

Initially, you need to set the path to the chromedriver.exe file using set property method since you are using Chrome Browser for testing. You need to set the path to CRX File to add extensions method. Then you need to create an object of Chrome Desired Capabilities in Selenium class and pass it to web driver instance.

Which capability is used for using an external Chromedriver?

The WebDriver language APIs provides ways to pass capabilities to ChromeDriver. The exact mechanism differs by the language, but most languages use one or both of the following mechanisms: Use the ChromeOptions class. This is supported by Java, Python, etc.

How do you pass ChromeOptions in RemoteWebDriver?

Once you create an instance of ChromeOptions, we can use 'setCapability()' method for setting ChromeDriver-specific capabilities and pass ChromeOptions object into the RemoteWebDriver constructor in the place of Capabilities. If you see a log message as "Using `new ChromeOptions()` is preferred to `DesiredCapabilities.


2 Answers

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()) 
like image 142
root Avatar answered Oct 11 '22 09:10

root


Just my two cents on this since the selenium remote and chrome webdrivers changed.

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         ) 
like image 39
Sakk Avatar answered Oct 11 '22 10:10

Sakk