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 )