Skip to content

Instantly share code, notes, and snippets.

@itsmnthn
Created May 11, 2022 06:52

Revisions

  1. itsmnthn created this gist May 11, 2022.
    86 changes: 86 additions & 0 deletions chromedriver-proxy-auth-selenium.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@
    import os
    import zipfile

    from selenium import webdriver

    PROXY_HOST = '192.168.3.2' # rotating proxy or host
    PROXY_PORT = 8080 # port
    PROXY_USER = 'proxy-user' # username
    PROXY_PASS = 'proxy-password' # password

    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 = """
    var config = {
    mode: "fixed_servers",
    rules: {
    singleProxy: {
    scheme: "http",
    host: "%s",
    port: parseInt(%s)
    },
    bypassList: ["localhost"]
    }
    };
    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
    function callbackFn(details) {
    return {
    authCredentials: {
    username: "%s",
    password: "%s"
    }
    };
    }
    chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    {urls: ["<all_urls>"]},
    ['blocking']
    );
    """ % (PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)

    def get_chromedriver(use_proxy=False, user_agent=None):
    path = os.path.dirname(os.path.abspath(__file__))
    chrome_options = webdriver.ChromeOptions()
    if use_proxy:
    pluginfile = 'proxy_auth_plugin.zip'

    with zipfile.ZipFile(pluginfile, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)
    chrome_options.add_extension(pluginfile)
    if user_agent:
    chrome_options.add_argument('--user-agent=%s' % user_agent)
    driver = webdriver.Chrome(
    os.path.join(path, 'chromedriver'),
    chrome_options=chrome_options)
    return driver

    def main():
    driver = get_chromedriver(use_proxy=True)
    #driver.get('https://www.google.com/search?q=my+ip+address')
    driver.get('https://httpbin.org/ip')

    if __name__ == '__main__':
    main()