Python Selenium Webdriver - Changing proxy settings on the fly

前端 未结 2 1850
孤街浪徒
孤街浪徒 2020-12-05 15:39

I\'m currently successfully using the code below to use a proxy with the Selenium webdriver. Unfortunately, I can\'t seem to make it change the proxy settings without restar

相关标签:
2条回答
  • 2020-12-05 16:20

    To set a proxy on the fly with 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"})
    

    Usage:

     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://....")
    
    0 讨论(0)
  • 2020-12-05 16:37

    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.(The SetupScript is a string containing the script to be runned enclosed by ``)

    Step 3: : Visit your site

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

    Explanation:the above code takes advantage of Firefox's API to change the preferences using JavaScript code.

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