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.
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.
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.
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.
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())
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 )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With