web-dev-qa-db-ja.com

chrome in python webdriverにプロキシを設定するにはどうすればよいですか

私はこのコードを使用しています:

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "proxy.server.address")
profile.set_preference("network.proxy.http_port", "port_number")
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)

python webdriver。これはFFで機能します。Chromeでこのようにプロキシを設定する方法は?これを見つけました exmaple しかし、あまり役に立ちません。スクリプトを実行しても何も起こりません(Chromeブラウザは起動しません)。

36
sarbo
from Selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or Host:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)

chrome = webdriver.Chrome(options=chrome_options)
chrome.get("http://whatismyipaddress.com")
70
Ivan

私のために働いています...

from Selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or Host:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
8
arun

私は同じことで問題がありました。 ChromeOptionsは、あなたが思うように望ましい機能と統合されていないため、非常に奇妙です。正確な詳細は忘れてしまいますが、基本的にChromeOptionsは、目的の機能辞書を渡したかどうかに基づいて、特定の値をデフォルトにリセットします。

ChromeOptionsの複雑さを心配せずに独自の辞書を指定できるようにする次のモンキーパッチを実行しました

/Selenium/webdriver/chrome/webdriver.pyの次のコードを変更します。

def __init__(self, executable_path="chromedriver", port=0,
             chrome_options=None, service_args=None,
             desired_capabilities=None, service_log_path=None, skip_capabilities_update=False):
    """
    Creates a new instance of the chrome driver.

    Starts the service and then creates new instance of chrome driver.

    :Args:
     - executable_path - path to the executable. If the default is used it assumes the executable is in the $PATH
     - port - port you would like the service to run, if left as 0, a free port will be found.
     - desired_capabilities: Dictionary object with non-browser specific
       capabilities only, such as "proxy" or "loggingPref".
     - chrome_options: this takes an instance of ChromeOptions
    """
    if chrome_options is None:
        options = Options()
    else:
        options = chrome_options

    if skip_capabilities_update:
        pass
    Elif desired_capabilities is not None:
        desired_capabilities.update(options.to_capabilities())
    else:
        desired_capabilities = options.to_capabilities()

    self.service = Service(executable_path, port=port,
        service_args=service_args, log_path=service_log_path)
    self.service.start()

    try:
        RemoteWebDriver.__init__(self,
            command_executor=self.service.service_url,
            desired_capabilities=desired_capabilities)
    except:
        self.quit()
        raise 
    self._is_remote = False

変更されたのは「skip_capabilities_update」kwargだけでした。今、私は自分の辞書を設定するためにこれを行います:

capabilities = dict( DesiredCapabilities.CHROME )

if not "chromeOptions" in capabilities:
    capabilities['chromeOptions'] = {
        'args' : [],
        'binary' : "",
        'extensions' : [],
        'prefs' : {}
    }

capabilities['proxy'] = {
    'httpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'ftpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'sslProxy' : "%s:%i" %(proxy_address, proxy_port),
    'noProxy' : None,
    'proxyType' : "MANUAL",
    'class' : "org.openqa.Selenium.Proxy",
    'autodetect' : False
}

driver = webdriver.Chrome( executable_path="path_to_chrome", desired_capabilities=capabilities, skip_capabilities_update=True )
5
user2426679

認証が必要なchromeでプロキシサーバーをセットアップする方法を尋ねる人々は、これらの手順に従う必要があります。

  1. プロジェクトにproxy.pyファイルを作成し、これを使用して code からproxy_chromeを呼び出します
    proxy.pyが必要なときはいつでも。認証のためにプロキシサーバー、ポート、ユーザー名パスワードなどのパラメーターを渡す必要があります。
2
Rajat Soni