Dynamically changing proxy in Firefox with Selenium web server

Is there a way to dynamically change the proxy server used by Firefox when using selenium webdriver?

I currently have proxy support using a proxy profile, but is there a way to change the proxy server when the browser is live and working?

My current code is:

proxy = Proxy({ 'proxyType': 'MANUAL', 'httpProxy': proxy_ip, 'ftpProxy': proxy_ip, 'sslProxy': proxy_ip, 'noProxy': '' # set this value as desired }) browser = webdriver.Firefox(proxy=proxy) 

Thanks in advance.

+6
source share
3 answers

As far as I know, there are only two ways to change the proxy server settings: one through the profile (which you use), and the other using the driver’s capabilities when creating it in accordance with here . Unfortunately, none of these methods does what you want, as they both happen earlier when you create your driver.

I have to ask, why do you want to change proxy settings? The only solution I can think of is to point firefox to the proxy server, which you can change at runtime. I'm not sure, but this is possible using a browser proxy.

+3
source

This is a little old question. But in fact, you can dynamically change proxies through the " hacker path " I'm going to use Selenium JS with Firefox, but you can follow it in the language you need.

Step 1: Visit "about: config"

 driver.get("about:config"); 

Step 2: Run the script that will change the 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); 

Where $ {abcd} is used , where you put your variables, in the example above I use ES6, which handles concatenation as shown, you can use other concatenation methods of your choice, depending on your language.

Step 3:. Visit your site.

 driver.get("http://whatismyip.com"); 

Explanation: The above code uses the Firefox API to change settings using JavaScript code.

+2
source

One possible solution is to close the webdriver instance and create it after each operation by transferring the new configuration to the browser profile

+1
source

All Articles