¿Cómo configuro el proxy para Chrome en Python Webdriver?

Estoy usando este código:

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) 

para configurar el proxy para FF en Python webdriver. Esto funciona para FF. ¿Cómo configurar un proxy como este en Chrome? He encontrado este ejemplo, pero no es muy útil. Cuando ejecuto el script, no pasa nada (el navegador Chrome no se inicia).

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

Su trabajo para mí …

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

Tuve un problema con la misma cosa. ChromeOptions es muy raro porque no está integrado con las capacidades deseadas como usted pensaría. Olvidé los detalles exactos, pero básicamente ChromeOptions restablecerá los valores predeterminados de ciertos valores en función de si pasaste o no un dictado de capacidades deseado.

Hice el siguiente parche de mono que me permite especificar mi propio dictado sin preocuparme por las complicaciones de ChromeOptions

cambie el siguiente código en /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 

todo lo que cambió fue el “skip_capabilities_update” kwarg. Ahora solo hago esto para establecer mi propio dictado:

 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 ) 

Para la gente que pregunta cómo configurar el servidor proxy en Chrome, que necesita autenticación, debe seguir estos pasos.

  1. Cree un archivo proxy.py en su proyecto, use este código y llame a proxy_chrome desde
    proxy.py cada vez que lo necesites. Debe pasar parámetros como el servidor proxy, el puerto y la contraseña del nombre de usuario para la autenticación.
 from selenium import webdriver from selenium.webdriver.common.proxy import * myProxy = "86.111.144.194:3128" proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy': myProxy, 'ftpProxy': myProxy, 'sslProxy': myProxy, 'noProxy':''}) driver = webdriver.Firefox(proxy=proxy) driver.set_page_load_timeout(30) driver.get('http://whatismyip.com')