how to override default set of chrome command line switches in selenium

牧云@^-^@ 提交于 2020-02-27 07:54:17

问题


By default, chrome will be run with this command line:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
--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
--enable-logging
--log-level=1
--ignore-certificate-errors
--no-default-browser-check
--test-type=ui
--user-data-dir="C:\Users\nik\AppData\Local\Temp\scoped_dir1972_4232"
--testing-channel=ChromeTestingInterface:1972.1
--noerrdialogs
--metrics-recording-only
--enable-logging
--disable-zero-browsers-open-for-tests
--allow-file-access
--allow-file-access-from-files about:blank

I need to override(remove) all commands --disable-*, since there are no equivalent command --enable-*.

In the end, I want to run browser with this command line:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"    
--dom-automation
--full-memory-crash-report
--no-first-run
--safebrowsing-disable-auto-update
--safebrowsing-disable-download-protection
--enable-logging
--log-level=1
--ignore-certificate-errors
--test-type=ui
--user-data-dir="C:\Users\nik\AppData\Local\Temp\scoped_dir1972_4232"
--testing-channel=ChromeTestingInterface:1972.1
--noerrdialogs
--metrics-recording-only
--enable-logging
--allow-file-access
--allow-file-access-from-files about:blank

For example, I try to run browser with translation Infobar. I found the option --enable-translate.

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['chrome.switches'] = ['--enable-translate']

But this did not help, infobar does not appear. In commandline, there are two commands: --disable-translate and --enable-translate. This is because it is necessary remove the command --disable-default-apps


回答1:


You should start browser by yourself and then tell selenium, that you already have it launched via passing special channel id. Something like that:

from random import randrange
channel_id = "%032x" % randrange(16**32)

from subprocess import Popen
# HERE YOU PASS ONLY THOSE PARAMETERS YOU WANT (i.e. without --disable-*)
# BUT YOU MAY NEED --dom-automation FOR SOME ROUTINES
chrome = Popen(" ".join([
    PATH_TO_CHROME_EXE,
    "--no-first-run", "--dom-automation",
    ("--testing-channel=\"NamedTestingInterface:%s\"" % channel_id),
]))

try:
    from selenium.webdriver.chrome.service import Service
    chromedriver_server = Service(PATH_TO_CHROMEDRIVER, 0)
    chromedriver_server.start()
    from selenium.webdriver import Remote
    driver = Remote(chromedriver_server.service_url,
        {"chrome.channel": channel_id, "chrome.noWebsiteTestingDefaults": True})

    driver.get(MY_WEBPAGE)
    # DO YOUR WORK

finally:
    chromedriver_server.stop()
    driver.quit()

chrome.kill()
chrome.wait()



回答2:


Assuming you want to do this in Python, you can add a parameter to chromeOptions so that it won't enable these switches (a bit confusing, but ok).

Given that you want to remove the following switches:

--disable-hang-monitor
--disable-prompt-on-repost
--disable-background-networking
--disable-sync
--disable-translate
--disable-web-resources
--disable-client-side-phishing-detection
--disable-component-update
--disable-default-apps
--disable-zero-browsers-open-for-tests

You would set up your Chrome driver like so:

from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_experimental_option(
    'excludeSwitches',
    ['disable-hang-monitor',
     'disable-prompt-on-repost',
     'disable-background-networking',
     'disable-sync',
     'disable-translate',
     'disable-web-resources',
     'disable-client-side-phishing-detection',
     'disable-component-update',
     'disable-default-apps',
     'disable-zero-browsers-open-for-tests'])

chromeDriver = webdriver.Chrome(chrome_options=chromeOptions)



回答3:


Now you can just use the excludeSwitches property.

   desiredCapabilities: {
        browserName: 'chrome',
        chromeOptions: {
            args: [],
            excludeSwitches: [ "disable-background-networking" ]
        }
    }

Note the lack of "--".




回答4:


The official way to customize the Chrome options from within selenium:

    # renaming import in order to avoid collision with Options for other browsers, so that you can also use e.g.
    # from selenium.webdriver.firefox.options import Options as FirefoxOptions

    from selenium.webdriver.chrome.options import Options as ChromeOptions


    options = ChromeOptions()
    options.add_argument("--headless")
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-extensions')
    options.add_argument('--no-sandbox')
    options.add_argument('window-size=1920,1080')

    # only necessary if you want to use a specific binary location
    # options.binary_location = '/Applications/Chromium.app/Contents/MacOS/Chromium'

    driver = webdriver.Chrome(chrome_options=options)


来源:https://stackoverflow.com/questions/16149610/how-to-override-default-set-of-chrome-command-line-switches-in-selenium

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!