Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save SwapnilSoni1999/6bfb19a282f97201bebc9ae965423127 to your computer and use it in GitHub Desktop.
Save SwapnilSoni1999/6bfb19a282f97201bebc9ae965423127 to your computer and use it in GitHub Desktop.

Revisions

  1. @ryanqy ryanqy created this gist Jan 29, 2018.
    111 changes: 111 additions & 0 deletions selenium_chrome_driver_proxy_with_authentication.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,111 @@
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    from __future__ import print_function

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options



    def create_proxyauth_extension(proxy_host, proxy_port,
    proxy_username, proxy_password,
    scheme='http', plugin_path=None):
    """Proxy Auth Extension
    args:
    proxy_host (str): domain or ip address, ie proxy.domain.com
    proxy_port (int): port
    proxy_username (str): auth username
    proxy_password (str): auth password
    kwargs:
    scheme (str): proxy scheme, default http
    plugin_path (str): absolute path of the extension
    return str -> plugin_path
    """
    import string
    import zipfile

    if plugin_path is None:
    plugin_path = '/tmp/vimm_chrome_proxyauth_plugin.zip'

    manifest_json = """
    {
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
    "proxy",
    "tabs",
    "unlimitedStorage",
    "storage",
    "<all_urls>",
    "webRequest",
    "webRequestBlocking"
    ],
    "background": {
    "scripts": ["background.js"]
    },
    "minimum_chrome_version":"22.0.0"
    }
    """

    background_js = string.Template(
    """
    var config = {
    mode: "fixed_servers",
    rules: {
    singleProxy: {
    scheme: "${scheme}",
    host: "${host}",
    port: parseInt(${port})
    },
    bypassList: ["foobar.com"]
    }
    };
    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
    function callbackFn(details) {
    return {
    authCredentials: {
    username: "${username}",
    password: "${password}"
    }
    };
    }
    chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    {urls: ["<all_urls>"]},
    ['blocking']
    );
    """
    ).substitute(
    host=proxy_host,
    port=proxy_port,
    username=proxy_username,
    password=proxy_password,
    scheme=scheme,
    )
    with zipfile.ZipFile(plugin_path, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

    return plugin_path

    proxyauth_plugin_path = create_proxyauth_extension(
    proxy_host="proxy.crawlera.com",
    proxy_port=8010,
    proxy_username="fea687a8b2d448d5a5925ef1dca2ebe9",
    proxy_password=""
    )


    co = Options()
    co.add_argument("--start-maximized")
    co.add_extension(proxyauth_plugin_path)


    driver = webdriver.Chrome(chrome_options=co)
    driver.get("http://www.whatsmybrowser.org/")