tuve un problema con la misma cosa. ChromeOptions es muy extraño porque no está integrado con las capacidades deseadas como pensarías. Olvidé los detalles exactos, pero básicamente ChromeOptions restablecerá ciertos valores predeterminados según si pasaste o no una capacidad deseada.
hice lo siguiente mono-parche que me permite especificar la dict sin preocuparse por las complicaciones de la ChromeOptions
cambio 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 kwarg "skip_capabilities_update". Ahora solo hago esto para establecer mi propio 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)
Perdón por preguntar lo obvio, pero ¿cambiaste las líneas 'Firefox' por sus equivalentes de Chrome? ¿Podrías enviarme tu código? –
Además, ¿qué quiere decir con "no pasa nada"? ¿Hay un mensaje de error? ¿Un estado de salida de cualquier tipo? –
Noté que si tengo un conjunto de proxy en Internet Explorer, la secuencia de comandos no funciona (FF se abre pero falla en driver.get ("google.com/";)). No hay mensajes de error, se niega a conectarse. La secuencia de comandos funciona si no hay configuraciones de proxy habilitadas en Internet Explorer. – sarbo