How do I set proxy for chrome in python webdriver? How do I set proxy for chrome in python webdriver? python python

How do I set proxy for chrome in python webdriver?


from selenium import webdriverPROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORTchrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--proxy-server=%s' % PROXY)chrome = webdriver.Chrome(options=chrome_options)chrome.get("http://whatismyipaddress.com")


Its working for me...

from selenium import webdriverPROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORTchrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--proxy-server=http://%s' % PROXY)chrome = webdriver.Chrome(chrome_options=chrome_options)chrome.get("http://whatismyipaddress.com")


I had an issue with the same thing. ChromeOptions is very weird because it's not integrated with the desiredcapabilities like you would think. I forget the exact details, but basically ChromeOptions will reset to default certain values based on whether you did or did not pass a desired capabilities dict.

I did the following monkey-patch that allows me to specify my own dict without worrying about the complications of ChromeOptions

change the following code in /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

all that changed was the "skip_capabilities_update" kwarg. Now I just do this to set my own dict:

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 )