Python Selenium Webdriver – Cambiar la configuración del proxy sobre la marcha

Actualmente estoy usando con éxito el siguiente código para usar un proxy con el controlador de web Selenium. Desafortunadamente, parece que no puedo hacer que cambie la configuración del proxy sin reiniciar todo el navegador. Tenía la esperanza de que simplemente actualizar la configuración del proxy, al igual que lo hice para configurar el proxy para comenzar, cambiaría el proxy, pero no parece funcionar. Cualquier ayuda en este tema sería muy apreciada.

profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.http", proxyAddress) profile.set_preference("network.proxy.http_port", proxyPort) profile.update_preferences() driver = webdriver.Firefox(firefox_profile=profile) 

Esta es una pregunta un poco vieja. Pero en realidad es posible cambiar los proxies dinámicamente a través de una ” forma pirateada “. Usaré Selenium JS con Firefox, pero puede seguirlo en el idioma que desee.

Paso 1: Visitando “about: config”

 driver.get("about:config"); 

Paso 2: Ejecutar script que cambia 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 use $ {abcd} es donde pone sus variables, en el ejemplo anterior, estoy usando ES6 que maneja la concatenación como se muestra, puede usar otros métodos de concatenación de su elección, dependiendo de su idioma. (El SetupScript es una cadena que contiene el guión que se ejecutará incluido 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 utilizando el 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://....")