Created
January 29, 2018 13:18
-
-
Save ryanqy/c60d927abef43535550b98cd622850a9 to your computer and use it in GitHub Desktop.
selenium chrome driver proxy with authentication
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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/") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment