Solución:
Ésta es una pregunta un poco vieja. Pero en realidad es posible cambiar los proxies dinámicamente a través de un “camino hacky“Voy a usar Selenium JS con Firefox pero puede seguir en el idioma que desee.
Paso 1: Visitando “about: config”
driver.get("about:config");
Paso 2 : Ejecutar secuencia de comandos que cambia de proxy
var setupScript=`var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.http", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.http_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ssl", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ssl_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ftp", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ftp_port", "${proxyUsed.port}");
`;
//running script below
driver.executeScript(setupScript);
//sleep for 1 sec
driver.sleep(1000);
Donde usar $ {abcd} es donde pones tus variables, en el ejemplo anterior estoy usando ES6 que maneja la concatenación como se muestra, puedes usar otros métodos de concatenación de tu elección, dependiendo de tu idioma. SetupScript es un cuerda que contiene el script que se ejecutará encerrado por “)
Paso 3: : Visita tu sitio
driver.get("https://whatismyip.com");
Explicación: el código anterior aprovecha la API de Firefox para cambiar las preferencias usando código JavaScript.
Para configurar un proxy sobre la marcha con Firefox:
def set_proxy(driver, http_addr="", http_port=0, ssl_addr="", ssl_port=0, socks_addr="", socks_port=0):
driver.execute("SET_CONTEXT", {"context": "chrome"})
try:
driver.execute_script("""
Services.prefs.setIntPref('network.proxy.type', 1);
Services.prefs.setCharPref("network.proxy.http", arguments[0]);
Services.prefs.setIntPref("network.proxy.http_port", arguments[1]);
Services.prefs.setCharPref("network.proxy.ssl", arguments[2]);
Services.prefs.setIntPref("network.proxy.ssl_port", arguments[3]);
Services.prefs.setCharPref('network.proxy.socks', arguments[4]);
Services.prefs.setIntPref('network.proxy.socks_port', arguments[5]);
""", http_addr, http_port, ssl_addr, ssl_port, socks_addr, socks_port)
finally:
driver.execute("SET_CONTEXT", {"context": "content"})
Uso:
driver = webdriver.Firefox()
set_proxy(driver, http_addr="212.35.56.21", http_port=8080)
driver.get("http://....")
set_proxy(driver, http_addr="212.35.56.22", http_port=8888)
driver.get("http://....")