使用远程驱动程序设置chrome选项

时间:2012-11-05 06:55:41

标签: python selenium webdriver selenium-chromedriver

所以有一个很好的long list of switches可以传递给chromedriver。

我想使用其中一些,特别是--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
}

我没有see any other arguments(除desired_capabilities之外)通过webdriver.Remote将参数传递给chromedriver。这是真的?我错过了什么吗?还有其他一些定制chromedriver的策略吗?

在CromeDrive维基页面上有一个很好的示例,显示"Starting Chromium with Specific Flags"但是所有示例都是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新实例的默认参数的位置。

4 个答案:

答案 0 :(得分:22)

这应该为您提供可用的标志:

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

答案 1 :(得分:1)

从源代码看来,唯一可行的方法是将其传递给desired_capabilities。该词典通过POST请求sent directly to the remove driver

在查看如何使用特定标志启动铬之后,可能会发生类似这样的事情:

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

答案 2 :(得分:1)

由于硒遥控器和Chrome网络驱动程序发生了变化,我只花了两分钱。

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
        )

答案 3 :(得分:0)

ChromeOptions(),用于传递其他参数。试试这个来禁用chromedriver.log

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