Forked from ryanqy/selenium_chrome_driver_proxy_with_authentication.py
Created
September 5, 2021 14:06
-
-
Save perymerdeka/2b20a70513f2aecb311154bb8c57dccb to your computer and use it in GitHub Desktop.
selenium chrome driver proxy with authentication
This file contains hidden or 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