Dynamically changing proxy in Firefox with Selenium webdriver

后端 未结 3 1262
日久生厌
日久生厌 2020-12-03 12:05

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

Currently I have proxy support using a proxy profile but is th

相关标签:
3条回答
  • 2020-12-03 12:18

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

    0 讨论(0)
  • 2020-12-03 12:23

    This is a slightly old question. But it is actually possible to change the proxies dynamically thru a "hacky way" I am going to use Selenium JS with Firefox but you can follow thru in the language you want.

    Step 1: Visiting "about:config"

    driver.get("about:config");
    

    Step 2 : Run script that changes 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 use ${abcd} is where you put your variables, in the above example I am using 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 takes advantage of Firefox's API to change the preferences using JavaScript code.

    0 讨论(0)
  • 2020-12-03 12:41

    As far as I know there are only two ways to change the proxy setting, one via a profile (which you are using) and the other using the capabilities of a driver when you instantiate it as per here. Sadly neither of these methods do what you want as they both happen before as you create your driver.

    I have to ask, why is it you want to change your proxy settings? The only solution I can easily think of is to point firefox to a proxy that you can change at runtime. I am not sure but that might be possible with browsermob-proxy.

    0 讨论(0)
提交回复
热议问题