title: Proxy server for Selenium and Python
body: <p>I'm trying to use a proxy server to launch the Selenium Chrome driver. The only solution so far that I found was to use a sort of plugin for Chrome to authenticate, but it's not very reliable, so I was wondering if there is any other option.</p>
  
  <p>Here is what I use now</p>
  
  <pre><code>    manifest_json = """
      {
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "Chrome Proxy",
      "permissions": [
      "proxy",
      "tabs",
      "unlimitedStorage",
      "storage",
      "&lt;all_urls&gt;",
      "webRequest",
      "webRequestBlocking"
      ],
      "background": {
      "scripts": ["background.js"]
      },
      "minimum_chrome_version":"22.0.0"
      }
      """
  
  background_js = """
      var config = {
      mode: "fixed_servers",
      rules: {
      singleProxy: {
      scheme: "http",
      host: "",
      port: parseInt(6060)
      },
      bypassList: ["foobar.com"]
      }
      };
  
      chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
  
      function callbackFn(details) {
      return {
      authCredentials: {
      username: "",
      password: ""
      }
      };
      }
  
      chrome.webRequest.onAuthRequired.addListener(
      callbackFn,
      {urls: ["&lt;all_urls&gt;"]},
      ['blocking']
      );
      """
  
  
  pluginfile = 'proxy_auth_plugin.zip'
  
  with zipfile.ZipFile(pluginfile, 'w') as zp:
      zp.writestr("manifest.json", manifest_json)
      zp.writestr("background.js", background_js)
  
  co = Options()
  co.add_argument("--start-maximized")
  co.add_extension(pluginfile)
  
  
  driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
  </code></pre>